5

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

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

我在匹配第二个匹配项时遇到了一些问题,我想返回第二个方括号,其中包含一个数字。我有一些正则表达式,可以找到字符串中数字的第一个方形背景:

\[+[0-9]+\]

这将返回[7],但我希望返回[9]。

我正在使用Javascript的replace函数,以下regex与regex测试应用程序中的第二个匹配项([9]),但在Javascript replace功能中没有正确替换:

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

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

干杯!

3个答案

重置为默认值

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

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

这将查找中的第二个数字[]。将其替换为1美元[<更换>].按规则玩.

正则表达式无法按预期工作,因为后面跟着组+最后只能拿着最后的 【xxx】.

7
  • 你为什么使用{3}作为量词?这并不是一种“在我们想要的标签之前总是有三个标签,之后总是有一个”的情况,难道你不应该根据提问者的实际要求来设置正则表达式吗?就个人而言,我会使用/(\[\d+\](?:\[.*?\d.*?\])*)(\[\t+\])/\1[替换]/ 评论 2011年1月9日20:58
  • @Anon我们不知道xxx个不是数字。我以为是这样,但也许我错了。
    – 莫努丁
    评论 2011年1月9日21:00
  • 我添加了另一个正则表达式,它将替换第二个正则表达式[<数字>].
    – 莫努丁
    评论 2011年1月9日21:04
  • @马克:提问者提到他想要“第二场比赛”,所以我想我们可以假设【xxx】与以下内容不匹配[9].虽然尚不清楚【xxx】可以是这样的[123]或者它是否必须包含非数字的内容。 评论 2011年1月9日21:05
  • @你同意我的新正则表达式吗? 评论 2011年1月9日21:06
1

尝试

结果=subject.replace(/(\[\d\]\[[^\]+\])\[\d\]/,“$1[replace]”);

作为注释正则表达式:

(#在backref 1中捕获以下内容:\[\d\]#第一次出现[数字]\[      # [[^\]]+#除]之外的任何字符序列\]      # ])#捕获组结束\[\d\]#匹配第二次出现的[digit]

如果【xxx】第一组和第二组之间的组[数字]组是可变的,然后使用

结果=subject.replace(/(\[\d\](?:\[[^\]]+\])*?)\[\d\]/,“$1[替换]”);

通过包围与【xxx】带(非捕获)括号和惰性量词的组*?我要求正则表达式引擎匹配尽可能少的组,但要尽可能多,以便下一个组是[数字]组。

0
控制台.log(“xxxxxx[xxxxxx][7][xxxxxx][9][xxxxx]”.replace(/^(.*\[[0-9]+\].*)(\[[0-9]+\])(.*)$/, '$1[15]$3')); // 替换为比赛前($1)和比赛后($3)的比赛($2)

返回:

//xxxxxx[xxxxxx][7][xxxxxx][15][xxxxx]

它将匹配[n]前面有一组括号,括号内有数字。

1
  • 不确定这是否重要,但这在[1][2][3]上失败-替换最后的[3]。也许OP应该提供一些测试。。。
    – 铁杉
    评论 2011年1月9日21:04

你的答案

单击“发布您的答案”,表示您同意我们的服务条款并确认您已阅读我们的隐私政策.

不是你想要的答案吗?浏览标记的其他问题问你自己的问题.