尝试找到一个正则表达式模式,该模式将匹配由空格分隔的重复字符串,但前提是它位于较大字符串的开头。
"Copy of Copy of Copy of This is my String"
我想摆脱所有“Copy of”字符串,结果是:
"This is my String"
“副本”可能会发生未知次数。想要摆脱所有这些,但前提是它们始于字符串的开头。
我试过了:\G(\Copy of )( (?=\1 ))?
这是我看到的一个例子,但无法弄清楚如何修改它以便按我的意愿工作。
答案 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()
以空格结尾的字符序列:^(.+?)\1+
以字边界结尾的字符序列:^(.+?\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, ''))