2014-10-09 92 views
1

請有人可以幫助我用正則表達式來驗證這種模式的Javascript模式驗證

aaa [bbb] 

我想在上面呈現的格式輸入的字符串。 aaa & bbb可以是一個或多個可能包含特殊字符的單詞的任意組合。 bbb必須包含在方括號內([...])。完整的字符串可以有前導或尾隨空格。

我已經試過這樣:

var re=/\w{0,} \[*\w{0,}\]/ 

但它在測試字符串返回假像:

re.test("onc>*!llklk[dd<dfd]") 
+0

是,但此/ \ W {0,} \ [* \ W {0,} \] /測試( 'AAA [BBB!]')。失敗 – Paullo 2014-10-09 13:31:34

回答

1

首先,以使其更易於閱讀,你可以取代{0,}*,因爲它是一樣的事情。 接下來,\w>*等某些符號不匹配,您可以使用.來匹配任何符號。 然後,就像其他答案所說,你期待兩個組之間有空格(aaa和[bbb]),所以你的例子不會匹配。

我認爲這個正則表達式是一個很好的起點(取決於你的其他要求)。

/.+\[.+\]/ 

Try it here

+0

謝謝@lechariotdor我測試了你的解決方案,它似乎沒關係,但在這個測試中失敗/.*\[.*\]/.test("[dd Paullo 2014-10-09 13:40:57

+0

好的,如果你在[bbb]組之前至少需要1個字符,你應該用'+'替換第一個'*'。我編輯過。如果您在'[]'之間至少需要一個字符,則應該替換第二個'*'。 – tiledcode 2014-10-09 13:42:57

+0

再次感謝您的努力,但最新的解決方案無法通過此測試/.+\[.*\]/。test(「sdsd!sdsd []「)。這應該返回false – Paullo 2014-10-09 13:52:01

2

你的正則表達式明確要求的空間存在。我們可以想像Regexper此:

Example

這將返回上"onc>*!llklk[dd<dfd]"假的,因爲沒有空格字符。

解決您的問題,無論是使用具有空格字符測試字符串,或者改變你的正則表達式不要求這個人物:

var re = /\w{0,}\[*\w{0,}\]/; 
re.test("aaa [bbb]"); 
> true 

re.test("onc>*!llklk[dd<dfd]"); 
> true 

你可能想,雖然重新思考你的正則表達式,因爲它的立場,一個"]"字符將通過測試:

re.test("]"); 
> true 
+0

謝謝@詹姆斯唐納利 – Paullo 2014-10-09 14:15:21

2
\S+\s*\[\S+?\] 

,如果你想允許的特殊字符,以及你可以試試這個。

http://regex101.com/r/yA1jY6/3

+0

謝謝@vks,這真是太好了,它通過了一系列測試用例期望/ \ S + \ s * \ [\ S +?\]/.test(「sdsd!sdsd [hjhj * sfsd]」)和/ \ S + \ s * \ [\ S +?\] /。test(「sdsd!sdsd [hjhj * sfsd]」)請幫助我? – Paullo 2014-10-09 13:46:51

+0

對不起,我的意思是這很棒,它通過了一系列測試用例,期望/ \ S + \ s * [\ S +?] /。test(「sdsd!sdsd []」)請幫助我嗎? bbb和/ \ S + \ s * [\ S +?] /。test(「[]」)也通過 – Paullo 2014-10-09 13:55:16

+0

@Paullo這將完全改變問題和答案。我建議您發佈一個新的問題,接受:) – vks 2014-10-09 13:59:16