正则表达式根据位置替换部分字符串

时间:2013-10-03 19:35:41

标签: jquery regex string replace position

给出以下字符串:

matrix(1.5, 0, 0, 2, 160, 160)

我想用1替换第一个和第四个值 - 无论它们是什么 - 所以我有:

matrix(1, 0, 0, 1, 160, 160)

如果第一个和第四个值恰好相同,我可以像这样轻松地替换它们:

.replace(/1\.5/g, "1")

但这只是匹配数字,而不是位置,所以如果第一个和第四个值不相同,它就不起作用。我想用1替换这两个位置的任何值。

4 个答案:

答案 0 :(得分:1)

您可以使用正则表达式:

.replace(/[\d.]+(?=(?:, [\d.]+){5}|(?:, [\d.]+){2}\))/g, "1")

regex101 demo

只有在数字前面还有5或2个数字,直到结束时,它才会基本匹配一个数字(如果有的话)。

答案 1 :(得分:1)

此模式[\d.]+((,[\s*\d.]+){2},\s*)[\d.]+将替换第一个和第四个参数,而不管剩余参数的数量。 替换为1$11 Demo

答案 2 :(得分:0)

这是一个不需要任何当前参数类型知识的解决方案:

.replace(/\(([^,]*),\s*([^,]*),\s*([^,]*),\s*([^,]*),\s*(.*?)\)/, "(1, $2, $3, 1, $5)");

这可以通过从开始paren到结束paren进行匹配并在单独的捕获组中捕获每个参数(除了在组5中捕获所有剩余的参数)。这比其他一些替代方案略长,但却是一个非常易读的替代品。

答案 3 :(得分:0)

从左到右阅读,您可以随时删除要替换的细分。无论是1还是99:

 #  (\(\s*)[^,]*((?:,[^,]*){2},\s*)[^,]*
 #  Replacement =  $1 + '1' + $2 + '1' 

 ( \( \s* )              # (1), Preamble
 [^,]*                   # 1st value
 (                       # (2), middle 

      (?: , [^,]* ){2}
      , \s* 
 )
 [^,]*                   # 4th value