Regex(正则表达式),替换javascript中第二次出现的地方

问题描述 投票:0回答:3

这是正在使用的字符串的示例:

xxxxxx[xxxxxx][7][xxxxxx][9][xxxxxx]

我在匹配第二次出现的匹配时遇到了一些麻烦,我想返回第二个方括号,里面有一个数字。我有一些正则表达式找到字符串中带有数字的第一个方形backets:

\[+[0-9]+\]

这会返回 [7],但我想返回 [9]。

我正在使用 Javascript 的替换函数,以下正则表达式与正则表达式测试应用程序中的第二次出现([9])匹配,但在 Javascript 替换函数中未正确替换:

(?:.*?(\[+[0-9]+\])){2}

我的问题是如何使用上面的正则表达式来替换 Javasctipt 中的 [9] 或者是否有另一个正则表达式与方括号中第二次出现的数字相匹配。

干杯!

javascript regex string replace
3个回答
3
投票

如果

xxx
只是任何字符串,不一定是数字,那么这可能就是您想要的:

(\[[0-9]+\]\[.*?\])\[([0-9]+)\]

这将查找

[]
中的第二个数字。将其替换为
$1[<replacement>]
在红宝石上玩它

您的正则表达式无法按预期工作,因为后面跟着

+
的组最终只会保留 last
[xxx]


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]
组。


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] 前面有一组括号内有数字的位置。

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.