我在一些继承的代码上运行了JSLint,并收到了以下内容:
Problem at line 24 character 36: Unexpected '\'.
content = content.replace(/\<a href=/g, '<a target="blank" href=');
我已经谷歌搜索了一段时间,并发现this这表明我不必在Javascript替换中逃避。
HTML += '<div class="articleBody">'
+ this.myData.record[0][0][5].replace(/<\/?a[^>]*>/gi,'') + '</div>';
但是我的标准regExp介绍会建议they do,就像一些other random sites一样,它甚至会特别谈论Javascript(虽然它自己的例子表明JSLink是对的)。
下一个断言字符在a的开头和结尾匹配 一句话,他们是:
&LT;和&gt;
虽然Mozilla的网页(replace()和RegExp)没有说 做了断言&安培; &gt;,我一直无法找到一个明确说明Javascript 故意没有用&lt;断言的地方。在其RegExp / replace方法中。也就是说,我没有找到任何说明Javascript实现逃脱&lt;是错误。而且,实际上,已转义的或未转义&lt;似乎工作正常。不可否认,任何未保留的转义字符似乎都可以正常工作 - 例如,\ e === e,尽管\ t!== t wrt replace()。
除此之外:我确实意识到并非所有RegExp实现都是相同的,并且实现Javascript不会做,例如,后视。但这是非常常见的知识。这个断言让我难以找到。
有人可以把它放到我的床上吗?有没有找到It Is Written
&lt; 1}的地方? 故意被忽略作为Javascript RegExp中断言的标记,并且相反的任何事情都是不正确的行为?
答案 0 :(得分:2)
JSLint是lint,它告诉您代码是有问题的(根据作者的标准),但这并不意味着您的代码语义错误。人们逃避<
和>
以避免将Javascript代码解释为HTML,尽管在您的案例中转义<
是无用的。
可以保证,在JS Regex中,\<
等同于<
。 (ECMA-262§15.10.2,IdentityEscape)。基本上,任何逃避的非字母数字都与自身相同。 (但是,\e
似乎没有在标准中定义。)它与断言(?<=…)
无关。
答案 1 :(得分:0)
你去,http://www.regular-expressions.info/lookaround.html
“最后,像JavaScript,Ruby和Tcl这样的版本根本不支持lookbehind,即使它们确实支持前瞻。”
请参阅关于Lookbehind的重要说明