使用正则表达式在javascript中搜索全字

时间:2013-09-18 17:01:26

标签: javascript

我正在尝试使用以下正则表达式在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',它会返回C.S作为匹配。此外,搜索示例返回一个匹配但在这种情况下我不想匹配,因为它有括号。我只想匹配整个单词。任何建议都将不胜感激。

- 编辑 -

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

2 个答案:

答案 0 :(得分:6)

使用捕获组?

.*?\b(S)

Regular expression visualization

Debuggex Demo

我认为您的第二个\b也会破坏您的代码。

只需用您想要查找的值替换(S)。

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

修改

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

Regular expression visualization

Debuggex Demo

你可以在开始时拿出.*?,并在正则表达式结束时把它放在那里以便彻底。

S前面的[^\s$]替换为您要检查的值。 此外,如果您想在值前面允许更多内容,您只需在第一个捕获组中添加额外的|"character"

例如括号

.*?(?:^|\s|\()

答案 1 :(得分: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