通过正则表达式从单词剪切前缀和后缀

时间:2018-04-19 07:27:08

标签: javascript regex

你可以帮我写一个正则表达式,它给我一个没有指定前缀和后缀的单词吗?

每个单词以点(。)开头,以' Zacher'结尾,例如:

  • .mobileZacher =>输出应该是移动的
  • .carZacher =>输出应该是汽车
  • .StevenZacher => =>输出应该是史蒂文

我试过这个str.replace(/(?:.)|(?:Zacher)/, ''),但它只替换了点

2 个答案:

答案 0 :(得分:5)

试试以下正则表达式:

str.replace(/\.(.+?)Zacher/, '$1')

我们正在寻找点字符,然后将所有内容与Zacher的第一次出现匹配,并将其替换为它们之间的字符串。

您还可以将(.+?)部分(接受任何字符)替换为([a-zA-Z]+?)以仅匹配字母。

或者使i

对案例不敏感
str.replace(/\.([a-z]+?)Zacher/i, '$1')

答案 1 :(得分:1)

我会在两者之间提取组。和Zacher使用此RegEx:

\.(.*)Zacher

反斜杠用于escape。字符。

它基本上会告诉RegEx不要解释。作为一个快乐的角色(它在RegEx中的标准功能),但作为一个简单的“。”。

然后我会在字符串替换中使用它 由于我们想要提取第一个(也是唯一一个)提取的组,我们将使用$ 1:

str.replace(/\.(.*)Zacher/, '$1')

如果您想了解更多,可以使用RegEx分组功能获得此类结果 分组函数语法使用括号(something_in_here)。

以下是Mozilla Documentation的简要说明:

  

(x)匹配x并记住匹配。这些被称为捕获组。

     

例如,/(foo)/匹配并记住“foo bar”中的“foo”。

     

捕获组根据捕获组左括号的顺序编号,从1开始。匹配的子串可以从结果数组的元素2,...,[n]或从预定义的RegExp对象的属性$ 1,...,$ 9。

     

捕获组会降低性能。如果您不需要调用匹配的子字符串,则更喜欢非捕获括号(见下文)。

我建议您使用RegExr来试验您的RegEx。

如果你想在练习时学到更多东西RegExOne对我有很大的帮助。