我在一些继承的代码上运行 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 是正确的)。
The next assertion characters match at the beginning and end of a word, they are:
< and >
虽然 Mozilla 的页面( replace() 和 RegExp )没有说它确实使用 < & > 进行断言,但我一直找不到一个地方明确说明 Javascript 故意不在其 RegExp/replace 方法中使用 < 进行断言。也就是说,我还没有发现任何地方说转义<的Javascript实现是错误的。而且,事实上,转义的或未转义<似乎工作正常。不可否认,任何未保留的转义字符似乎都可以正常工作 - 例如,\e === e,尽管\t !== t wrt replacement()。
旁白:我确实意识到并非所有 RegExp 实现都是相同的,并且意识到 Javascript 不具备向后查找等功能。但这是很常见的知识。我很难找到这些断言。
有人可以帮我把这个放在床上吗?是否有地方可以找到 It Is Written
, < 作为 Javascript RegExp 中的断言标记有意被忽略,并且任何相反的行为都是不正确的行为?
最佳答案
JSLint 是 lint ,它告诉您您的代码有问题(根据作者的标准),但这并不意味着您的代码在语义上是错误的。人们逃跑<
和>
以避免 Javascript 代码被解释为 HTML,尽管转义 <
在你的情况下是没有用的。
可以保证,在 JS Regex 中,\<
相当于 <
。 (ECMA-262 §15.10.2,IdentityEscape)。基本上,任何转义的非字母数字都等于其自身。 (但是,\e
似乎没有在标准中定义。)它与断言(?<=…)
无关。 .
关于javascript - Javascript RegExp 中的 < 是否作为断言被有意忽略(如 JSLint 所建议的那样)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10400409/