gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 16:02:39 25 4
gpt4 key购买 nike

我有许多输入对可以使用 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com