Angular JS正则表达式替换

时间:2015-07-27 06:49:31

标签: javascript regex angularjs

这个问题是Regex match whole word including whitespace and fullstop

的延续

我最终使用的正则表达式是(<(p|li)\b[^<>]*>[^<>\n]*)\b(Cat|Dog|Fish)\b([^<>\n]*<\/\2>)

现在,我需要将匹配的单词替换为其他HTML。

帮助我建立这个正则表达式的Vks建议我可以访问$3变量来获取匹配的单词。但我似乎无法做到这一点。 (https://regex101.com/r/oC5rY5/12#javascript

我正在尝试在Angular JS中进行替换,这是我不太熟悉的。

html.replace(regex, function(fullMatch, match) {
    if (angular.isString(match)) {
        var abc = fullMatch.length > match.length ? fullMatch[0] : '';

        //Custom function to fetch data based on the matched word.
        var obj = $scope.getMoreInfo(match);
        if (angular.isObject(obj)) {
            return abc + '<div class="test123" url="' + obj.Url + '" text="' + match + '">' + match + '</div>';
        }
    }
    return fullMatch;
});

如何在此处访问$3match不会回复匹配的字词。尝试使用match[3],但这也不起作用。

请注意,我的替换不只是1个字符串,而是整个页面的HTML,因此需要递归。

1 个答案:

答案 0 :(得分:0)

您可以通过位置参数获取替换函数中的匹配组。第一个参数是匹配,然后p1, p2 and so on是匹配的组。所以在你的情况下,你可以得到第三场比赛。

html.replace(regex, function(match, p1, p2, p3, p4) {
    console.log(p3);
});

有关详细信息,请参阅此处的参考https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/String/replace#Specifying_a_function_as_a_parameter