使用 RegEx 匹配字符串列表

Org*_*cat 3 javascript regex angularjs

我有一个函数可以突出显示 AngularJS 中字符串中任意数量的单个单词。我想更改此设置,以便它突出显示我在数组中输入的任何单词,但我不确定如何表达 RegExp。这是当前的正则表达式:

$scope.highlight = function(haystack) {
    return $sce.trustAsHtml(haystack.replace(new RegExp(needle, "gi"), function(match) {
        return '<span class="highlightWord">' + match + '</span>';
    }));
};
Run Code Online (Sandbox Code Playgroud)

当前的“needle”变量只是一个普通字符串,如“cats”,但我想更改它,使其包含['cats', 'registered', 'dog']等等。

Tus*_*har 5

使用该方法通过管道(正则表达式中的 OR 运算符)join()连接数组元素。|

此外,您可以使用$&获取匹配的字符串并将其用于替换字符串。

$scope.highlight = function (haystack) {
    return $sce.trustAsHtml(haystack.replace(new RegExp(needle.join('|'), "gi"), '<span class="highlightWord">$&</span>'));
};
Run Code Online (Sandbox Code Playgroud)

$scope.highlight = function (haystack) {
    return $sce.trustAsHtml(haystack.replace(new RegExp(needle.join('|'), "gi"), '<span class="highlightWord">$&</span>'));
};
Run Code Online (Sandbox Code Playgroud)
var arr = ['cat', 'dog', 'elephant'];
var str = 'Cat fears dog and dog fears elephant';

document.body.innerHTML = str.replace(new RegExp(arr.join('|'), 'gi'), '<span class="highlightWord">$&</span>');
Run Code Online (Sandbox Code Playgroud)

要匹配精确的单词,请使用单词边界\b

str.replace(new RegExp('\\b(' + arr.join('|') + ')\\b', 'gi'), '<span class="highlightWord">$1</span>')
Run Code Online (Sandbox Code Playgroud)