Javascript:正则表达式代码不会执行

Javascript: Regex code will not execute

本文关键字:执行 代码 正则表达式 Javascript      更新时间:2023-09-26

在我开始之前,我只想说我是正则表达式的新手,所以请对我温柔一点。任何关于正则表达式的评论将不胜感激。

我写了下面的代码

var str = "<blah blah more <b>test</b>>";
var reg1 = "<(?!b>)(?!/b>)";
str = str.replace(new RegExp(reg1), "&lt;"); 
var reg2 = ">(?<!b>)(?<!/b>)";
str = str.replace(new RegExp(reg2), "&gt;"); 
alert(str);

我已经使用 http://regexr.com?2toe2 检查了正则表达式,它做了我想要的,即匹配任何<>,但前提是它们不是 html 标签。"我暂时只报道了。

现在,如果运行此代码,则永远不会执行警报 http://jsfiddle.net/ashburlaczenko/JdATY/9/。我在第一次替换后放置了一个警报,该警报显示,因此错误处于第二阶段。

谁能帮我?请记住,这些正则表达式是我的第一次尝试。

提前谢谢你。

编辑:

<blah blah more <b>test</b>><another <b>blah</b> blah <b>test</b>>

应该成为

&lt;blah blah more <b>test</b>&gt;&lt;another <b>blah</b> blah <b>test</b>&gt;

希望这更清楚。

JavaScript 不支持正则表达式中的后视断言。 你可以模仿它,在这篇博文的帮助下,但它仍然不是那么好。

function escapeHtml($0, $1, $2, $3)
{
    var result = $1 == '<' ? '&lt;' + $2 + $3 : $1 + $2 + '&gt;';
  return result;
}
str = str.replace(/([<>])([^<>]*?)('1)/g, escapeHtml);
str = str.replace(/^([^<]*?)>/, '$1&gt;');
str = str.replace(/<([^>]*?)$/, '&lt;$1');

这个适用于给出的例子。

第一个替换执行以下操作:

  • 它寻找<>的重复,它们之间没有<>,例如 <...<>...> .
  • 第一个括号是 $
  • 1,中间的文本是 $2,最后一个括号是 $3。
  • 如果 $1 是<,则 $1 被转义,否则 $3 被转义。

如果第二个替换发生在字符串开头附近,并且前面没有<,则第二个替换>转义。

如果第三个替换发生在字符串末尾附近,后面没有>,则<第三个替换进行转义。