你可以帮我写一个正则表达式,它给我一个没有指定前缀和后缀的单词吗?
每个单词以点(。)开头,以' Zacher'结尾,例如:
我试过这个str.replace(/(?:.)|(?:Zacher)/, '')
,但它只替换了点
答案 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对我有很大的帮助。