这个问题是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;
});
如何在此处访问$3
? match
不会回复匹配的字词。尝试使用match[3]
,但这也不起作用。
请注意,我的替换不只是1个字符串,而是整个页面的HTML,因此需要递归。
答案 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