是<故意忽略Javascript RegExp作为断言(如JSLint建议的那样)?

时间:2012-05-01 15:59:15

标签: javascript regex replace jslint

我在一些继承的代码上运行了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中断言的标记,并且相反的任何事情都是不正确的行为?

2 个答案:

答案 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的重要说明