【发布时间】:2020-11-11 11:06:00
【问题描述】:
我正在尝试使用 RegExp 和 String.replace 来替换以空格分隔的字符串中的倒数第二个单词。
我不明白为什么我的代码不起作用。我在正确的匹配项周围有括号,那么为什么它会替换整个 RegExp 的匹配项而不是捕获组内的匹配项?
const re = /(\w+) \w+$/;
const string = 'john deer senior third';
const result = string.replace(re, match => `[${match}]`);
console.log(result); // john deer [senior third]
想要的结果:
john deer [senior] third
【问题讨论】:
-
函数签名不是你想的那样。第一个参数是完整匹配,而不是第一个捕获组。见MDN。
-
另外,
replace不会只替换捕获组,而是替换完整匹配。但是,您可以只捕获另一半,然后简单地将其连接回:'john deer senior third'.replace(/(\w+)( \w+)$/, (_, a, b) => `[${a}]${b}`)。可能有更漂亮/优雅的方式来做到这一点。 -
非常感谢,您能否复制并粘贴它以获得最佳答案?
标签: javascript regex string-matching