javascript - Javascript RegExp 中的 < 是否作为断言被有意忽略(如 JSLint 所建议的那样)?

标签 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 是正确的)。

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/

相关文章:

r - 从列中提取模式并在 R 数据框中创建一个新模式

python - 如何创建一个负向后查找表达式 - 添加 - 不能是空词

regex - Perl6 搜索然后替换为子程序的输出

postgresql - 如何用两个单引号字符替换一个单引号字符

javascript - 单击 div 时,Anchor #Tag 将整个页面向上移动

javascript - 如何获得非重叠的圆形包装 d3 js 图表?

javascript - 搜索 http ://and https://in a string

javascript - 如何在 Firefox 扩展中使用 nsIArrayBufferInputStream 将 ArrayBuffer 直接异步写入文件

javascript - 循环遍历 API JSON 数据不起作用

regex - 在Vim中查找和替换,重用 token