如何替换 Javascript 中的正则表达式子字符串匹配?

Posted

技术标签:

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

str.replace(regex, 1);

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

【问题讨论】:

仅供参考,所有解决方案都非常复杂。你只是想更换比赛,对吧?无需修改正则表达式的简单方法如下:str.replace(regex, "$`1$'") 见developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/… 【参考方案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`);

【讨论】:

以上是关于如何替换 Javascript 中的正则表达式子字符串匹配?的主要内容,如果未能解决你的问题,请参考以下文章

C# 如何高效替换一个字符串中的全部某字符?

使用正则表达式(regex)替换jQuery / JavaScript中的选定文本

javascript 正则表达式 替换 html 中的 p标签替换成BR标签

如何使用 javascript 正则表达式替换 URL 的主机部分

javascript正则表达式(RegExp)简述

JavaScript-正则表达式