对此可能有一个非常简单的答案,可能是因为我对替换方法的熟悉(或可能缺乏)以及它如何与正则表达式一起工作。
我们说我有以下字符串:abcdefHellowxyz
我只想删除前六个字符和后四个字符,使用正则表达式返回Hello
...是的,我知道可能还有其他方法,但我试图探索这些方法能够做什么的界限......
无论如何,我在http://regex101.com上进行了修改并得到了以下正则表达式:
/^(.{6}).+(.{4})$/
这似乎很好地传递了字符串并显示abcdef
被捕获为组1,而wxyz
被捕获为组2.但是当我尝试运行以下内容时:
"abcdefHellowxyz".replace(/^(.{6}).+(.{4})$/,"")
用""替换那些被捕获的群组。我收到一个空字符串作为我的最终输出...这个语法我做错了什么?如果是这样,那么如何纠正它,保持我原来的立场想要以这种方式使用正则表达式...
提前感谢所有人......
答案 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"
;因此,整个字符串被替换。相反,如果你严格剥离无关子串的长度,你可以简单地使用substring
或substr
。
您可能正在寻找的答案是捕获中间令牌,而不是外部令牌:
var str = "abcdefHellowxyz";
var matches = str.match(/^.{6}(.+).{4}$/);
str = matches[1]; // index 0 is entire match
console.log(str);