为什么即使正则表达式,正则表达式的替换也不起作用?

时间:2017-08-21 01:38:50

标签: javascript regex string

对此可能有一个非常简单的答案,可能是因为我对替换方法的熟悉(或可能缺乏)以及它如何与正则表达式一起工作。

我们说我有以下字符串:abcdefHellowxyz

我只想删除前六个字符和后四个字符,使用正则表达式返回Hello ...是的,我知道可能还有其他方法,但我试图探索这些方法能够做什么的界限......

无论如何,我在http://regex101.com上进行了修改并得到了以下正则表达式:

/^(.{6}).+(.{4})$/

这似乎很好地传递了字符串并显示abcdef被捕获为组1,而wxyz被捕获为组2.但是当我尝试运行以下内容时:

"abcdefHellowxyz".replace(/^(.{6}).+(.{4})$/,"")

用""替换那些被捕获的群组。我收到一个空字符串作为我的最终输出...这个语法我做错了什么?如果是这样,那么如何纠正它,保持我原来的立场想要以这种方式使用正则表达式...

提前感谢所有人......

2 个答案:

答案 0 :(得分:2)

以下代码可以正常使用

"abcdefHellowxyz".replace(/^.{6}(.+).{4}$/,"$1")

我认为只使用()来捕获您想要的文字,在replace()的第二个参数中,您可以使用$1 $2 ...来表示group1 group2。 您还可以将函数传递给replace的第二个参数,并将捕获的文本转换为此函数中的任何内容。

有关详细信息,正如@Akxe建议的那样,您可以在https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/replace上找到文档。

答案 1 :(得分:1)

您正在使用以下代码行替换匹配/^(.{6}).+(.{4})$/的任何子字符串:

"abcdefHellowxyz".replace(/^(.{6}).+(.{4})$/,"")

正则表达式匹配整个字符串"abcdefHellowxyz";因此,整个字符串被替换。相反,如果你严格剥离无关子串的长度,你可以简单地使用substringsubstr

修改

您可能正在寻找的答案是捕获中间令牌,而不是外部令牌:

var str = "abcdefHellowxyz";
var matches = str.match(/^.{6}(.+).{4}$/);
str = matches[1];  // index 0 is entire match
console.log(str);