2014-05-06 57 views
1
/\b(okay|ok|o\.k\.)\b/g 

比賽的一切,但o.k.正則表達式:逃逸點是沒有幫助

/\b(okay|ok|o\.k\..)\b/g 

確實匹配O.K.但如果不是。在字符串的末尾。我錯過了什麼?

+2

你正在使用什麼樣的正則表達式?什麼語言? –

+2

\ b我會假設與\不兼容。 – Dalorzo

+0

請發佈主題字符串和所需匹配的示例。 –

回答

1

問題是,您應用的是\b這是一個字邊界,這就是爲什麼o.k.在行的開頭或末尾不匹配的原因。

使用以下內容時,與okay,oko.k.匹配。

(okay|ok|o\.k\.) 

如果你申請的第一\b字邊界,而不是最後一個,你可以匹配所有的單詞,但是這仍然可以讓像「notok」或「oknot」錯誤匹配。

\b(okay|ok|o\.k\.) 
+0

這也將匹配在「notok」 OK – Dalorzo

+0

是的,這是真的,這就是我爲什麼我提到,將第一個'\ B'字邊界不匹配,如「n​​otok」的數據。然而,用第一個單詞邊界,你也可以匹配'oknot'。感謝您的輸入! – Signus

5

\b是一個字邊界,該邊界不匹配以下.,如Signus指出。你想是這樣的:

/\b(okay\b|ok\b|o\.k\.)/g 

說明,並鏈接到debuggex演示:

Regular expression visualization

Debuggex Demo

例子:

"okay dude ok o.k. yep".match(/\b(okay\b|ok\b|o\.k\.)/g) 
// returns ["okay", "ok", "o.k."] 

注意,\b仍然存在,括號內,okayok後。因此,它不匹配,例如,okayed。例如:

"he okayed the idea".match(/\b(okay\b|ok\b|o\.k\.)/g) 
// returns null 
+0

我需要\ b在最後以避免部分匹配。例如,如果我最後省略了\ b,在字符串「他好了這個想法」中,okayed的好的部分將匹配,我不想要。 – jsaunders

+1

它在那裏;我只是把它放在括號裏。它不會匹配您評論中的字符串。 –

4

正如正確地觀察別人,這是\b在引起你的問題的結束。 \b只匹配一個分詞 - 也就是說,一邊有\w字符,另一邊有\W(某些GREP方言中的非單詞字符)。由於已經一個不是一個單詞在一側,這將仍然匹配您o.k. ..但只有在後面緊跟一個單詞字符。

一種解決方案是在括號中其他「常規」裏面的話結束移動\b(一個在一開始是好的):

/\b(okay\b|ok\b|o\.k\.)/g 
0

我想你要找的是一個非獲取匹配: /(?i)(okay|ok|o\.k\.)(?:\b|\s|$)/g

使用單詞邊界是確定的。但是,這是不夠的。

既然你想在什麼樣子的日常使用OK這個詞相匹配,我已經擴大了它一下你讓它不區分大小寫,仍然允許你當它與標點符號結束匹配。

http://regex101.com/r/nR2sO3