在我开始之前,我只想说我对Regex来说是全新的,所以请温柔地对待我。任何有关正则表达式的评论都将非常感激。
我写了下面的代码
var str = "<blah blah more <b>test</b>>";
var reg1 = "<(?!b>)(?!/b>)";
str = str.replace(new RegExp(reg1), "<");
var reg2 = ">(?<!b>)(?<!/b>)";
str = str.replace(new RegExp(reg2), ">");
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>>
应该成为
<blah blah more <b>test</b>><another <b>blah</b> blah <b>test</b>>
希望这更清楚。
答案 0 :(得分:2)
JavaScript不支持正则表达式中的后视断言。你可以在this blog post的帮助下模仿它,但它仍然不是很好。
答案 1 :(得分:1)
function escapeHtml($0, $1, $2, $3)
{
var result = $1 == '<' ? '<' + $2 + $3 : $1 + $2 + '>';
return result;
}
str = str.replace(/([<>])([^<>]*?)(\1)/g, escapeHtml);
str = str.replace(/^([^<]*?)>/, '$1>');
str = str.replace(/<([^>]*?)$/, '<$1');
这个适用于给出的例子。
第一个替换执行以下操作:
<
或>
之间没有<
或>
的重复内容,例如<...<
或>...>
。 第二个替换为>
转义,如果它出现在字符串开头附近而没有<
之前。
第三个替换为<
,如果它出现在字符串末尾附近而后面没有>
。