javascript - 为什么这个正则表达式会返回前面的字符?

标签 javascript regex

我试图获取前面没有其他几个字符(a、b 或 c)之一的字符 (d) 的每次出现。下面的正则表达式可以工作并返回我想要的字符,但它也返回紧邻其之前的字符(例如空格或其他字符)。

var rgx = /(?:[^abc])d/
var string = 'abcd d de cd ad da bd'

你可以测试一下here .

通常我会使用负向后查找,但我正在使用 javascript,这似乎是满足我需要的简单解决方法。我知道有一些解决方法可以在 JS 中实现lookbehind,但我有兴趣了解为什么这个正则表达式会这样工作。

最佳答案

您需要使用 2 个不同的捕获组:

var rgx = /(?:^|[^abc])(d)/;

在 Javascript 正则表达式引擎中没有后向功能的情况下,从匹配中单独获取前一个字符。

RegEx Demo

关于javascript - 为什么这个正则表达式会返回前面的字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28633140/

相关文章:

javascript - Kendo Grid (HTML5) 的性能问题

php - 正则表达式在 PHP 中的 2 个标签之间获取文本

JavaScript - 使用正则表达式匹配非 ASCII 符号

用于匹配美元金额的 Java 正则表达式

javascript - 在 witt 的最后...... Javascript 不会取代 '\n' !

javascript - 不显眼的快速过滤下拉列表 <optgroup> 实现

javascript - Chrome 扩展设置为 `run_at` `document_start` 运行速度太快?

objective-c - 带算术的 NSRegularExpression

Python程序从文本文件中提取文本?

javascript - 嵌入然后替换为 angularjs