javascript - 如何检查子字符串的 CONTEXT 是否与 JavaScript 中的正则表达式匹配?

标签 javascript regex

我有许多输入对可以使用 JavaScript 在文本中进行搜索。每对都包含一个短字符串(比如 cc)和它应该位于的上下文(比如 [^\d]cc[^\d])。我想在文本中找到匹配项,但这并不像使用 indexOf([^\d]cc[^\d]) 那样简单,因为这不会将子字符串作为引用。

例如,如果文本是 1cccd 我应该得到 2 作为输出,但是 '1cccd'.indexOf([^\d]cc[^\d]) 给出 1 因为这是它找到 [^\d] 的位置(正则表达式的开始)。

我试过像 '1cccd'.replace([^\d]cc[^\d], '$&').slice(i).indexOf('cc') == 0(其中 i 在文本中前进),但这会报告 cc 的所有实例,而不管上下文如何。

然后我尝试使用 match 中的捕获组来检查子字符串左侧的字符数量:var tmp = '1cccd'.match(([^\d] )cc[^\d]);返回 tmp.index+tmp[1].length;。但我无法将其定向到搜索区域,因为 match 不会从正则表达式中获取 lastIndex。另一方面,exec 确实接受了 lastIndex 但它不能使用捕获组。 (编辑:exec 可以 使用捕获组,如答案所示)

使用lookbehind 似乎是答案,但 JavaScript 不支持这些。

有没有办法检查给定位置的子字符串是否在给定的上下文中,如正则表达式所指定的那样?

最佳答案

这里的一种方法是匹配 捕获目标模式,包括字符串的剩余部分直到结束。然后,使用 indexOf(由起始标记字符偏移)来查找实际匹配发生位置的索引。

var input = "1cccd";
var regexp = /^.*([^\d])(cc[^\d].*)$/g;
var match = regexp.exec(input);
console.log(match[1]);

console.log(input.indexOf(match[2]));

这里的技巧是 match[1] 包含匹配项以及随后的所有其他内容。因此,使用它对输入进行 indexOf 查找应该只会解决一件事,即匹配。我偏移了 1,因为我们还在 cc 之前捕获了一个非数字字符。您可以调整此偏移量以匹配模式之前的标记字符数。

关于javascript - 如何检查子字符串的 CONTEXT 是否与 JavaScript 中的正则表达式匹配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50404523/

相关文章:

javascript - 日期时间格式 正则表达式 YYYY/MM/DD hh :mm:ss

JavaScript 日历无法正常工作

Python pandas 夹板字符串,添加行,每列不同

java - 在 Java 正则表达式中匹配 Unicode 破折号?

java - 将字符串中的正则表达式模式替换为取决于匹配的替换字符串

javascript - 选择 radio 时,更改 vue.js version2 上的图像 src

javascript - jQuery 调整大小和文档就绪组合

javascript - 根据 slider 图像更改具有模糊效果的页面背景颜色

javascript替换点(不是句点)字符

java - 更新角色需要正则表达式