Javascript:正则表达式代码将无法执行

时间:2011-05-12 19:33:45

标签: javascript regex

在我开始之前,我只想说我对Regex来说是全新的,所以请温柔地对待我。任何有关正则表达式的评论都将非常感激。

我写了下面的代码

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检查了正则表达式,它完成了我想要的匹配任何&lt; &gt; ,但仅限于不是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;

希望这更清楚。

2 个答案:

答案 0 :(得分:2)

JavaScript不支持正则表达式中的后视断言。你可以在this blog post的帮助下模仿它,但它仍然不是很好。

答案 1 :(得分:1)

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是&lt;,那么$ 1将被转义,否则$ 3将被转义。

第二个替换为>转义,如果它出现在字符串开头附近而没有<之前。

第三个替换为<,如果它出现在字符串末尾附近而后面没有>