给出以下字符串:
matrix(1.5, 0, 0, 2, 160, 160)
我想用1
替换第一个和第四个值 - 无论它们是什么 - 所以我有:
matrix(1, 0, 0, 1, 160, 160)
如果第一个和第四个值恰好相同,我可以像这样轻松地替换它们:
.replace(/1\.5/g, "1")
但这只是匹配数字,而不是位置,所以如果第一个和第四个值不相同,它就不起作用。我想用1
替换这两个位置的任何值。
答案 0 :(得分:1)
您可以使用正则表达式:
.replace(/[\d.]+(?=(?:, [\d.]+){5}|(?:, [\d.]+){2}\))/g, "1")
只有在数字前面还有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