3

我正在尝试使用以下正则表达式在 javascript 中执行整个单词搜索。

str = "Test String C.S (example)";
var regex_search = new RegExp("\\b"+search_string+"\\b","g");
if(str.match(regex_search)) != null)
  match = true;
else
  match = false;

如果我搜索像“String”这样的普通字符串,上述方法效果很好。但如果我只搜索“S”,它会返回 CS 作为匹配项。此外,搜索示例会返回匹配项,但在这种情况下,我不想要匹配项,因为它有括号。我只想匹配整个单词。任何建议将不胜感激。

- 编辑 -

感谢@plalx 澄清了这个例子。

4

2 回答 2

6

使用捕获组?

.*?\b(S)

正则表达式可视化

调试演示

我认为你的第二个\b也在破坏你的代码。

只需将 ( S) 替换为您要查找的值。

不太确定您要说实话。或者你想找到什么。

编辑:

.*?(?:^|\s)(S[^\s$]*).*?

正则表达式可视化

调试演示

.*?您可能会在正则表达式的开头和结尾取出它,以确保彻底性。

用您要检查的值替换S前面的。[^\s$]此外,如果您想在值之前允许更多的东西,您所要做的就是|"character"在第一个捕获组中添加一个额外的东西。

例如括号

.*?(?:^|\s|\()
于 2013-09-18T17:37:32.713 回答
4

单词边界都是非单词字符,包括.字符。您将不得不使用除\b.

我确信正则表达式可以简化,但你可以使用类似的东西:

function containsWord(string, word) {
    return new RegExp('(?:[^.\w]|^|^\\W+)' + word + '(?:[^.\w]|\\W(?=\\W+|$)|$)').test(string);
}

containsWord('test', 'test'); //true
containsWord('.test', 'test'); //true
containsWord('test.something', 'test'); //false
containsWord('test. something', 'test'); //true
containsWord('test.   something', 'test'); //true
containsWord('S.C', 'S'); //false
containsWord('S.C', 'S.C'); //true
于 2013-09-18T17:08:14.740 回答