regex 按出现位置替换匹配的正则表达式组

xjreopfe  于 2022-12-05  发布在  其他
关注(0)|答案(2)|浏览(142)

我正在开发SVG路径的拖放功能,它允许用户移动路径的坐标。
请考虑以下字符串:

M162.323 150.513L232.645 8L303.504 149.837L461.168 173.5L347.156 284.5L373.605 440.728L233.5 367.854L91.7415 442L118.424 284.883L5.151 173.549Z

是否可以使用.replace方法替换匹配正则表达式组的特定(比如第4次)出现?
Regex

[A-Z](-?\d*\.?\d*\s-?\d*\.?\d*)
jpfvwuh4

jpfvwuh41#

const s = 'M162.323 150.513L232.645 8L303.504 149.837L461.168 173.5L347.156 284.5L373.605 440.728L233.5 367.854L91.7415 442L118.424 284.883L5.151 173.549Z'

let n = 4, regex = /[A-Z](-?\d*\.?\d*\s-?\d*\.?\d*)/gm
console.log(s.replace(regex, m => --n ? m : 'hello'))
uubf1zoe

uubf1zoe2#

regex.exec()是一种方法,用于根据正则表达式在字符串中查找下一个匹配项。它返回一个包含匹配字符串和任何捕获组的数组,如果未找到匹配项,则返回null。此方法可用于循环,以迭代字符串中的所有匹配项,并相应地调整匹配项。

let string = "M162.323 150.513L232.645 8L303.504 149.837L461.168 173.5L347.156 284.5L373.605 440.728L233.5 367.854L91.7415 442L118.424 284.883L5.151 173.549Z";
let regex = /[A-Z](-?\d*\.?\d*\s-?\d*\.?\d*)/g;

// Replace the 4th match
let newString = "";
let index = 0;
let match;

while (match = regex.exec(string)) {
  if (index === 3) {
    // Do something to modify the 4th match
    newString += match[0].replace(/-?\d*\.?\d*\s-?\d*\.?\d*/, "REPLACED");
  } else {
    // Leave other matches unchanged
    newString += match[0];
  }
  index++;
}

console.log(newString);

相关问题