gpt4 book ai didi

javascript - 正则表达式匹配两个相同字符串之间的所有字符串

转载 作者:太空宇宙 更新时间:2023-11-04 15:56:35 25 4
gpt4 key购买 nike

例如我有这个字符串-- 这是 -- 一个 -- 另一个 -- 注释 --我希望匹配的元素是“这个”、"is"、“一个”、“另一个”和“评论”

我正在尝试这个正则表达式--\s+([^--]+)\s+--这给了我匹配的元素“这个”、“一个”和“评论”

我搜索了其他问题,它们都提供了这样的解决方案,即#A#,我会得到A,但是对于#A#B# > 我也得到 A,但在这种情况下,我想要元素 AB,因为它们都位于两个 # 之间 字符。

我正在测试它的 JavaScript 正则表达式,但我认为解决方案应该与平台/语言无关。

最佳答案

一般来说,您需要使用类似的模式

STRING([\s\S]*?)(?=STRING|$)

它将匹配 STRING,然后将任何零个或多个字符(尽可能少)捕获到第 1 组中,直到第一次出现 STRING *在此之前停止word** 因为 (?=...) 是一个正向前瞻,作为零宽度断言,不会消耗匹配的文本或字符串结尾。

该模式的一个通用变体是

STRING((?:(?!STRING)[\s\S])*)

它使用tempered greedy token , (?:(?!STRING)[\s\S])*,匹配任何字符,出现 0 次或多次,不启动 STRING 字符序列.

要获取当前解决方案中的所有子字符串,请使用类似的前瞻

/--\s+([\s\S]*?)(?=\s+--)/g
^^^^^^^^^

请参阅regex demo .

请注意,[^--]+ 匹配除 - 之外的 1 个或多个符号,它不匹配任何不等于 - 的文本- [...] 是匹配单个字符的字符类。要匹配从一个字符到模式第一次出现的任何长度的任何文本,您可以依赖 [\s\S]*? 构造:任何 0+ 个字符,尽可能少(由于惰性 *? 量词)。

JS 演示:

var s = '-- This -- is -- one -- another -- comment --';
var rx = /--\s+([\s\S]*?)(?=\s+--)/g;
var m, res=[];
while (m = rx.exec(s)) {
res.push(m[1]);
}
console.log(res);

关于javascript - 正则表达式匹配两个相同字符串之间的所有字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42645005/

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