regex 如何在JavaScript中替换正则表达式子字符串匹配?

nbnkbykc  于 2023-08-08  发布在  Java
关注(0)|答案(5)|浏览(74)
var str   = 'asd-0.testing';
var regex = /asd-(\d)\.\w+/;

str.replace(regex, 1);

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

1hdlvixo

1hdlvixo1#

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);

hxzsmxv2

hxzsmxv22#

使用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");
}

字符串
编辑:关于评论的改编

um6iljoc

um6iljoc3#

我会得到的一部分之前和之后,你想要取代,并把他们的任何一方。
喜欢的:

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]}`;

字符串

vq8itlhq

vq8itlhq4#

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

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

字符串

xurqigkl

xurqigkl5#

就个人而言,我喜欢replacer技术提供的自由(搜索“指定函数作为替换”部分)。这也是简单的调试细节。

function replacer(match, p1, p2, offset, string) {
    console.log('match = ' + match);
    console.log('p1 = ' + p1);
    console.log('p2 = ' + p2);
    console.log('offset = ' + offset);
    console.log('string = ' + string);
    custom_op = p1 + 1 + p2;

    return custom_op;
}

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

matches = str.match(regex)

res = str.replace(regex, replacer);
console.log(res);

// ----OUTPUT----
// match = asd-0.testing
// p1 = asd-
// p2 = .testing
// offset = 0
// string = asd-0.testing
// asd-1.testing

字符串

注意:为了简化正则表达式组的识别,可以考虑使用https://regex101.com/

相关问题