这是正在使用的字符串的示例:
xxxxxx[xxxxxx][7][xxxxxx][9][xxxxxx]
我在匹配第二次出现的匹配时遇到了一些麻烦,我想要在第二个方括号内输入一个数字。我有一些正则表达式在字符串中找到第一个带数字的方形支持:
\[+[0-9]+\]
返回[7],但我想返回[9]。
我正在使用Javascript的替换函数,以下正则表达式匹配正则表达式测试应用程序中的第二次出现([9]),但是在Javascript替换函数中没有正确替换它:
(?:.*?(\[+[0-9]+\])){2}
我的问题是我如何使用上面的正则表达式来替换Javasctipt中的[9],或者是否有另一个正则表达式匹配方括号中第二次出现的数字。
干杯!
答案 0 :(得分:3)
如果xxx
只是一个字符串,而不一定是数字,那么这可能是你想要的:
(\[[0-9]+\]\[.*?\])\[([0-9]+)\]
这会查找[]
中的第二个数字。将其替换为$1[<replacement>]
。 Play with it on rubular
您的正则表达式无法正常工作,因为+
后面的群组最终只能持有 last [xxx]
。
答案 1 :(得分:1)
尝试
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]
组。
答案 2 :(得分:0)
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]前面有一组括号内的数字。