我正在尝试使用以下正则表达式在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澄清了这个例子。
答案 0 :(得分:6)
使用捕获组?
.*?\b(S)
我认为您的第二个\b
也会破坏您的代码。
只需用您想要查找的值替换(S
)。
确实不确定你要求说实话。或者你想要找到什么。
修改强>
.*?(?:^|\s)(S[^\s$]*).*?
你可以在开始时拿出.*?
,并在正则表达式结束时把它放在那里以便彻底。
将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