【问题标题】:Why would the replace with regex not work even though the regex does?即使正则表达式可以,为什么用正则表达式替换也不起作用?
【发布时间】:2017-08-21 01:38:49
【问题描述】:

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

假设我有以下字符串:abcdefHellowxyz

我只想去掉前六个字符和后四个字符,返回Hello,使用正则表达式...是的,我知道可能还有其他方法,但我正在尝试探索这些内容的边界方法能够做到……

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

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

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

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

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

提前谢谢大家...

【问题讨论】:

标签: javascript regex string


【解决方案1】:

下面的代码如你所愿

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

我觉得只能用()来捕捉你想要的文字,而在replace()的第二个参数中,可以用$1$2...来表示group1group2。 您也可以将函数传递给replace 的第二个参数,并将捕获的文本转换为该函数中您想要的任何内容。

如@Akxe 推荐的,更多细节,你可以在https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/replace找到文档。

【讨论】:

  • 这样可以更快地编写代码...谢谢你们的帮助!
【解决方案2】:

您正在用这行代码替换任何与/^(.{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);

【讨论】:

  • 啊,这是有道理的......所以换句话说,如果我想以类似的方式保持用正则表达式替换的想法,它必须是......我猜@ 987654329@ ...?刚刚测试过...有效...感谢您清理它...在这里我认为只有分组会受到影响...傻我。
猜你喜欢
  • 2014-03-29
  • 1970-01-01
  • 1970-01-01
  • 2019-01-24
  • 1970-01-01
  • 1970-01-01
  • 2015-04-13
  • 2014-06-01
  • 1970-01-01
相关资源
最近更新 更多