匹配模式除了在一个条件下正则表达式

时间:2017-12-30 18:49:06

标签: javascript regex

我正在尝试将图案与正则表达式匹配,除非模式被转义。

测试文字:

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>&reg;</sup> is really cool Regex

很难解释我猜,但是当这个正则表达式的开头查找&并以;结尾时,如果&前面有\ \&比不匹配并查找下一个\&(.*?)\;

2 个答案:

答案 0 :(得分:1)

您可以使用negative lookbehind 这个正则表达式适用于该示例 /(?<!\\)\&(.*?)\;/g

编辑1

要在JS中解决方法,您可以使用[^\\]来匹配除反斜杠之外的所有内容。整体正则表达式/[^\\]\&(.*?)\;/g它适用于您的示例。

答案 1 :(得分:0)

由于JavaScript不支持lookbehind断言 - 可以添加一些自定义替换逻辑来实现所需的结果。我已经使用不同类型的html实体的示例更新了测试字符串以进行测试:

&#13;
&#13;
const str = '&T;his is AT\\&T&reg; 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;
&#13;
&#13;