正则表达式模式删除字符串开头的未知数量的重复指定字符串

时间:2016-06-03 00:35:23

标签: javascript regex

尝试找到一个正则表达式模式,该模式将匹配由空格分隔的重复字符串,但前提是它位于较大字符串的开头。

"Copy of Copy of Copy of This is my String"

我想摆脱所有“Copy of”字符串,结果是:

"This is my String"

“副本”可能会发生未知次数。想要摆脱所有这些,但前提是它们始于字符串的开头。

我试过了:\G(\Copy of )( (?=\1 ))?这是我看到的一个例子,但无法弄清楚如何修改它以便按我的意愿工作。

2 个答案:

答案 0 :(得分:1)

要匹配重复的字符串(不知道确切的字符串),您需要使用capturing groups and backreferences

根据'string'的定义,有多种解决方案,例如:

  • 任何字符序列:import turtle t = turtle.Turtle t.fillcolor("pink") t.pencolor("red") for x in range(10): for x in range(10): t.begin_fill() right(36) t.forward(15) t.end_fill() t.penup() t.right(36) t.forward(90) t.pendown()

    • 匹配e。 G。 “AAA A”的“AAA”,“AA AA B”的“AA”,空白
  • 以空格结尾的字符序列:^(.+?)\1+

    • 匹配e。 G。 “AA AA B”的“AA AA”,空白
  • 以字边界结尾的字符序列:^(.+?\s)\1+

    • 与空格不匹配。这可能就是你想要的。

如果您想匹配字符串的剩余非重复部分,只需将第二个捕获组^(.+?\b)\1+添加到上述正则表达式中:

(.*)

说明:// Get the repeated word: console.log('Copy of Copy of Copy of This is my String'.match(/^(.+?\b)\1+(.*)/)[1]); // Get the remaining string: console.log('Copy of Copy of Copy of This is my String'.match(/^(.+?\b)\1+(.*)/)[2]);匹配字符串的开头,捕获组^匹配任何字符一次或多次,后跟字边界,并允许我们稍后通过{{1}引用它的匹配}}。由于我们正在寻找一个或多个重复,因此我们尝试与(.+?\b)匹配。

我建议使用https://regex101.com/#javascript或类似工具来更好地理解和探索正则表达式。

答案 1 :(得分:0)

请参阅RegExp reference on MDN。 这解释了JavaScript中的RegExp模式是如何工作的。

  • 对于'字符串'的开头,请使用^
  • 对于'零次或多次',请使用*
  • 一次或多次使用+

最后两个中的任何一个都适用于这种情况。

全部放在一起:



var re = /^(Copy of )*/;
console.log('Copy of Copy of Copy of This is my String'.replace(re, ''));
console.log('Copy of This is my String'.replace(re, ''));
console.log('This is my String'.replace(re, ''))