【问题标题】:How can I replace a regex substring match in Javascript?如何替换 Javascript 中的正则表达式子字符串匹配?
【发布时间】:2011-04-05 14:40:22
【问题描述】:
var str   = 'asd-0.testing';
var regex = /asd-(\d)\.\w+/;

str.replace(regex, 1);

这会将整个字符串 str 替换为 1。我希望它替换匹配的子字符串而不是整个字符串。这在 Javascript 中可行吗?

【问题讨论】:

标签: javascript regex replace substring


【解决方案1】:
var str   = 'asd-0.testing';
var regex = /(asd-)\d(\.\w+)/;
str = str.replace(regex, "$11$2");
console.log(str);

或者如果您确定字符串中不会有任何其他数字:

var str   = 'asd-0.testing';
var regex = /\d/;
str = str.replace(regex, "1");
console.log(str);

【讨论】:

  • 或使用函数:'asd-0.testing'.replace(/(asd-)\d(\.\w+)/, function(mystring, arg1, arg2){return arg1 + '我的号码' + arg2})
  • 有什么你不知道正则表达式结构的答案吗?在这里,您基本上是在创建一个包含两个匹配项的新正则表达式
  • 很高兴知道您需要在您想要的部分周围使用大括号 () 作为 $1、$2 等。
【解决方案2】:

使用str.replace(regex, $1);:

var str   = 'asd-0.testing';
var regex = /(asd-)\d(\.\w+)/;

if (str.match(regex)) {
    str = str.replace(regex, "$1" + "1" + "$2");
}

编辑:关于评论的改编

【讨论】:

  • 我想用 '1' 替换子字符串,而不是用子字符串替换整个字符串
【解决方案3】:

我会在您要更换的部件之前和之后拿到零件并将它们放在两边。

喜欢:

var str   = 'asd-0.testing';
var regex = /(asd-)\d(\.\w+)/;

var matches = str.match(regex);

var result = matches[1] + "1" + matches[2];

// With ES6:
var result = `${matches[1]}1${matches[2]}`;

【讨论】:

  • +1 我个人喜欢收集火柴。
  • 我同意,在我看来,提供匹配的集合更具可读性。
【解决方案4】:

我认为实现目标的最简单方法是:

var str   = 'asd-0.testing';
var regex = /(asd-)(\d)(\.\w+)/;
var anyNumber = 1;
var res = str.replace(regex, `$1${anyNumber}$3`);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-09-02
    • 2015-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多