/\b(okay|ok|o\.k\.)\b/g
匹配o.k.
/\b(okay|ok|o\.k\..)\b/g
匹配o.k.但不是如果o.k.在字符串的末尾。我错过了什么?
答案 0 :(得分:5)
\b
是一个单词边界,与.
后面的/\b(okay\b|ok\b|o\.k\.)/g
不匹配,正如Signus指出的那样。你想要这样的东西:
"okay dude ok o.k. yep".match(/\b(okay\b|ok\b|o\.k\.)/g)
// returns ["okay", "ok", "o.k."]
解释并链接到debuggex演示:
示例:强>
\b
请注意,在okay
和ok
之后,okayed
仍位于括号内。因此,它不会匹配,例如,"he okayed the idea".match(/\b(okay\b|ok\b|o\.k\.)/g)
// returns null
。例如:
{{1}}
答案 1 :(得分:4)
正如其他人正确观察到的那样,最后\b
导致了您的问题。 \b
仅匹配分词 - 即一侧有\w
个字符,而某些GREP方言中有\W
个字符(非单词字符) )在另一边。由于 在一侧已经一个非单词,这仍然与您的o.k.
相匹配..但只有在紧跟一个单词字符后才会出现。
解决方案是将\b
移到括号内的末尾,以便其他常规'单词(一开始就可以):
/\b(okay\b|ok\b|o\.k\.)/g
答案 2 :(得分:1)
问题是您正在应用\b
这是一个单词边界,这就是o.k.
在行的开头或结尾不匹配的原因。
使用以下内容时,okay
,ok
和o.k.
会匹配。
(okay|ok|o\.k\.)
如果您应用第一个\b
字边界而不是最后一个,则可以匹配所有单词,但这仍然可以允许“notok”或“oknot”等错误匹配。
\b(okay|ok|o\.k\.)
答案 3 :(得分:1)
答案 4 :(得分:0)
我认为您正在寻找的是非捕捉匹配:
/(?i)(okay|ok|o\.k\.)(?:\b|\s|$)/g
使用单词边界是可以的。但是,这还不够。
由于你试图在日常使用中匹配单词ok,我已经扩展了一点,让它不区分大小写,并且当它以标点符号结束时仍允许你匹配。