这是正在使用的字符串的示例:
xxxxxx[xxxxxx][7][xxxxxx][9][xxxxxx]
我在匹配第二次出现的匹配时遇到了一些麻烦,我想返回第二个方括号,里面有一个数字。我有一些正则表达式找到字符串中带有数字的第一个方形backets:
\[+[0-9]+\]
这会返回 [7],但我想返回 [9]。
我正在使用 Javascript 的替换函数,以下正则表达式与正则表达式测试应用程序中的第二次出现([9])匹配,但在 Javascript 替换函数中未正确替换:
(?:.*?(\[+[0-9]+\])){2}
我的问题是如何使用上面的正则表达式来替换 Javasctipt 中的 [9] 或者是否有另一个正则表达式与方括号中第二次出现的数字相匹配。
干杯!
如果
xxx
只是任何字符串,不一定是数字,那么这可能就是您想要的:
(\[[0-9]+\]\[.*?\])\[([0-9]+)\]
这将查找
[]
中的第二个数字。将其替换为 $1[<replacement>]
。 在红宝石上玩它。
您的正则表达式无法按预期工作,因为后面跟着
+
的组最终只会保留 last [xxx]
。
尝试
result = subject.replace(/(\[\d\]\[[^\]]+\])\[\d\]/, "$1[replace]");
作为注释的正则表达式:
( # capture the following in backref 1:
\[\d\] # first occurrence of [digit]
\[ # [
[^\]]+ # any sequence of characters except ]
\] # ]
) # end of capturing group
\[\d\] # match the second occurence of [digit]
如果第一个和第二个
[xxx]
组之间的[digit]
组数量是可变的,则使用
result = subject.replace(/(\[\d\](?:\[[^\]]+\])*?)\[\d\]/, "$1[replace]");
通过用(非捕获)括号和惰性量词
[xxx]
包围与 *?
组匹配的部分,我要求正则表达式引擎匹配尽可能少的这些组,但尽可能多地匹配,以便下一组是[digit]
组。
console.log( "xxxxxx[xxxxxx][7][xxxxxx][9][xxxxxx]".replace(
/^(.*\[[0-9]+\].*)(\[[0-9]+\])(.*)$/,
'$1[15]$3')); // replace with matches before ($1) and after ($3) your match ($2)
返回:
// xxxxxx[xxxxxx][7][xxxxxx][15][xxxxxx]
它将匹配 [n] 前面有一组括号内有数字的位置。