2012-06-04 39 views
0

我已像一些不好的話:在正則表達式中單詞不相鄰?

'aaa','bbb','ccc' 

(不好的話還可以是 「約翰」, 「祿」, 「環」)(對不起@cyilan)

我不想讓bad word立即緊接着又/同bad word

aaa可以跟隨非壞詞和then應遵循的一個壞詞:

...aaaRoyibbb... //ok 
    ...cccRoyiaaa... //ok 

    ...aaabbb...// NOT OK 
    ...cccbbb...// NOT OK 
    ...cccccc...// NOT OK 

一個壞詞不允許立即,然後用另外/同樣的壞詞

我已經嘗試了一些正則表達式,但沒有成功..

任何幫助將非常感激

+0

這麼近意味着*正好相鄰* ? –

+0

@SiGanteng是的。謝謝。 –

+0

單詞之前/之前是否存在單詞邊界?例如'oooaaabbbkkk''不好或'好嗎? – Qtax

回答

1
var str = "...aaabbb..."; 
if(!str.test(/(?:aaa|bbb|ccc){2}/)){ 
    // passed 
} 

聊天透露什麼OP真正想要的是:

/^(?!(?:aaa|bbb|ccc)|.*(?:aaa|bbb|ccc){2}|.*(?:aaa|bbb|ccc)$)/ 

但真的真的:

^(?!(?:aaa|bbb|ccc)\b|.*\b(?:aaa|bbb|ccc)\s+(?:aaa|bbb|ccc)\b|.*\b(?:aaa|bbb|cc‌​c)$) 
+0

如果單詞分開,添加一個開頭和結尾的單詞邊界錨'\ b':'/ \ b(?:aaa | bbb | ccc){2} \ b /' – Qtax

+0

我該如何刪除NOT? (它應該是更大的正則表達式的一部分) - 所以我需要檢查:'.......(?: aaa | bbb | ccc){0} .......'注意{0 } ... –

+0

以及它也應該提到,我不想讓它更復雜,所以我只問了中間部分。但在聊天中,我允許自己向他展示整個畫面,而且確實是一個很好的解決方案。 –

1
match = subject.match(/\b([a-z]{3})(?:(?!\1)|(?=\1))[a-z]+\b/i); 
if (match != null) { 
    // matched text: match[0] 
    // match start: match.index 
    // capturing group n: match[n] 
} else { 
    // Match attempt failed 
} 
+0

aaa,bbb只是一個示例。它可以是任何壞詞。不只是'[a-z] {3}'。對不起cylian沒有提到它。我認爲這是cleatr。 –

0

你要找的是\ B中的解決方案。 \ b被定義爲單詞分隔符。如果它跟隨空格或數字,則如果以下文字是字母則匹配。如果它跟在字母后面,如果下列不是字母(即不是連續的單詞),則它匹配。它可有效地作爲一個錨標記,像這樣:

\byourword\b 

它會匹配:

This is yourword, but not mine. 
yourword is found in this sentence. 

但是,如果不匹配:

When yourwordis found in other words, this will not match. 
And ifyourword is at the end of another word, it will still not match.