繁体   English   中英

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

[英]Regex (regular expressions), replace the second occurence in javascript

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

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

我在匹配第二次匹配时遇到了一些麻烦,我想在第二个方括号内输入一个数字。 我有一些正则表达式找到第一个带字母数字的方形支持:

\[+[0-9]+\]

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

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

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

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

干杯!

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

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

这将在[]查找第二个数字。 将其替换为$1[<replacement>] 在rubular上玩它

您的正则表达式无法按预期工作,因为后跟+组最终只能保留最后一个 [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]

如果第一个和第二个[digit]组之间的[xxx]组的数量是可变的,则使用

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]前面有1组括号的数字,其中包含数字。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM