0

我在一些继承的代码上运行 JSLint,并收到以下信息:

Problem at line 24 character 36: Unexpected '\'.

content = content.replace(/\<a href=/g, '<a target="blank" href=');

我已经用谷歌搜索了一段时间,发现表明我不必在 Javascript 替换中转义。

HTML += '<div class="articleBody">' 
    + this.myData.record[0][0][5].replace(/<\/?a[^>]*>/gi,'') + '</div>';

但是我的标准 regExp 介绍会建议他们这样做,就像其他一些随机网站一样,最后甚至专门谈论 Javascript(尽管它自己的例子表明 JSLink 是正确的)。

下一个断言字符匹配单词的开头和结尾,它们是:

< 和 >

尽管 Mozilla 的页面(replace()RegExp)没有说它确实使用 < & > 进行断言,但我一直无法找到明确说明 Javascript在其 RegExp/replace 方法中故意不使用 < 进行断言的地方. 也就是说,我还没有找到任何地方说转义 < 的 Javascript 实现是错误的。 而且,确实,转义或未转义的< 似乎工作正常。诚然,任何未保留的转义字符似乎都可以正常工作——例如,\e === e,尽管 \t !== t wrt replace()。

旁白:我确实意识到并非所有 RegExp 实现都是平等的,并且意识到 Javascript 不做,例如,后视。但这是相当普遍的知识。我很难找到的断言。

有人可以帮我把这个放在床上吗?有没有地方可以发现It Is Written< 被故意忽略为 Javascript RegExp 中断言的标记,而相反的任何行为都是不正确的行为?

4

2 回答 2

2

JSLint 是lint,它告诉你你的代码有问题(根据作者的标准),但这并不意味着你的代码在语义上是错误的。人们逃避<>避免将这段 Javascript 代码解释为 HTML,尽管<在您的情况下转义是无用的。

保证,在 JS Regex 中,\<等价于<. (ECMA-262 §15.10.2,IdentityEscape)。基本上,任何转义的非字母数字都等于它自己。(但是,\e标准中似乎没有定义。)它与 assertions 无关(?<=…)

于 2012-05-01T16:29:25.877 回答
0

给你,在http://www.regular-expressions.info/lookaround.html上找到

“最后,像 JavaScript、Ruby 和 Tcl 这样的风格根本不支持后视,即使它们支持前瞻。”

从关于 Lookbehind 的重要说明中查看

于 2012-05-01T16:10:18.970 回答