我必须构建一个RegExp obejct,它将搜索数组中的单词, 并且只会发现整个单词匹配。
e.g。 我有一个单词数组('יל','ילד'), 我希望RegExp能够找到'a'或'ל'或'ל'',而不是'לל''。
这是我的代码:
var text = 'ילד ילדדד יל';
var matchWords = ['יל','ילד'];
text = text.replace(/\n$/g, '\n\n').replace(new RegExp('\\b(' + matchWords.join('|') + ')\\b','g'), '<mark>$&</mark>');
console.log(text);
我尝试过:
我试过这段代码:
new RegExp('(יל|ילד)','g');
效果很好,但它也找到了像“ילדדדד”这样的词,我只能匹配整个单词。
我也尝试了这段代码:
new RegExp('\\b(יל|ילד)\\b','g');
但是这个正则表达式找不到任何单词!
我应该如何构建我的RegExp?
答案 0 :(得分:1)
//Words to join
var words = ['apes', 'cats', 'bazooka'];
//String to search
var str = 'it\'s good that cats and dogs dont wear bazookas';
//End at start of line, end of line or whitespace
var end = '(^|$|\\s)';
//Regular expression string
var regex = end + "(" + words.join('|') + ")" + end;
//Build RegExp
var re = new RegExp(regex, "gi");
//Log results
console.log(str.match(re));
&#13;
或作为功能
var findWholeWordInString = (function() {
//End at start of line, end of line or whitespace
var end = '(^|$|\\s)';
//The actual function
return function(str, words) {
//Regular expression string
var regex = end + "(" + words.join('|') + ")" + end;
//Build RegExp
var re = new RegExp(regex, "gi");
//Return results
return str.match(re);
};
})();
//Run test
console.log(findWholeWordInString('it\'s good that cats and dogs dont wear bazookas', ['apes', 'cats', 'bazooka']));
&#13;
答案 1 :(得分:1)
单词边界\b
不支持Unicode。使用XRegExp
构建Unicode字边界:
var text = 'ילד ילדדד יל';
var matchWords = ['יל','ילד'];
re = XRegExp('(^|[^_0-9\\pL])(' + matchWords.join('|') + ')(?![_0-9\\pL])','ig');
text = XRegExp.replace(text.replace(/\n$/g, '\n\n'), re, '$1<mark>$2</mark>');
console.log(text);
&#13;
<script src="http://cdnjs.cloudflare.com/ajax/libs/xregexp/3.1.1/xregexp-all.min.js"></script>
&#13;
此处,(^|[^_0-9\\pL])
是ID = 1的捕获组,它匹配字符串start或除Unicode字母,ASCII数字或_
(前导词边界)和{{之外的任何字符。如果单词后面带有(?![_0-9\\pL])
,ASCII数字或Unicode字母,则会失败。