我正在尝试将图案与正则表达式匹配,除非模式被转义。
测试文字:
This is AT\&T® is really cool Regex
你可以看到我的\&我正在手动逃避。因此,不要让正则表达式匹配。
正则表达式:
const str = 'This is AT\&T® is really cool Regex'
str.replace(/\&(.*?)\;/g, '<sup>&$1;</sup>');
预期输出
This is AT&T<sup>®</sup> is really cool Regex
很难解释我猜,但是当这个正则表达式的开头查找&
并以;
结尾时,如果&
前面有\
\&
比不匹配并查找下一个\&(.*?)\;
答案 0 :(得分:1)
您可以使用negative lookbehind
这个正则表达式适用于该示例
/(?<!\\)\&(.*?)\;/g
要在JS中解决方法,您可以使用[^\\]
来匹配除反斜杠之外的所有内容。整体正则表达式/[^\\]\&(.*?)\;/g
它适用于您的示例。
答案 1 :(得分:0)
由于JavaScript不支持lookbehind断言 - 可以添加一些自定义替换逻辑来实现所需的结果。我已经使用不同类型的html实体的示例更新了测试字符串以进行测试:
const str = '&T;his is AT\\&T® is & really &12345; &xAB05; \\&cool; Regex'
console.log(str.replace(/&([a-z]+|[0-9]{1,5}|x[0-9a-f]{1,4});/ig, function (m0, m1, index, str) {
return (str.substr(index - 1, 1) !== '\\') ? '<sup>' + m0 + '</sup>' : m0;
}));
&#13;