从字符串中转义点,但在某些键旁边留下带点的单词

时间:2017-03-20 15:53:34

标签: javascript regex

如何匹配何时发生.one.zero以及字符串到第一个点之前和除了点之外的任何字符串,像\b(\w+)这样的正则表达式返回任何没有点的字符串,但我需要分组它与['app', 'users.one']['app', 'users.zero']相似,在其他情况下如['app', 'users', 'name']['app', 'users']

app.users.name
app.users.one
app.users.zero
app.users

3 个答案:

答案 0 :(得分:2)

您可以将split与带有negated look-ahead的正则表达式一起使用:

var output = input.split(/\.(?!(?:one|zero)(?:\.|$))/);

答案 1 :(得分:1)

您可以使用此正则表达式在拆分中使用否定前瞻:

/\.(?!(?:zero|one)\b)/

除了zeroone之后,每个DOT都将拆分。

RegEx Demo

<强>代码:

function dotsplit(str) {
   return str.split(/\.(?!(?:zero|one)\b)/);
}

arr = dotsplit('app.users.name')
//=> ["app", "users", "name"]

arr = dotsplit('app.users.one')
//=> ["app", "users.one"]

arr = dotsplit('app.users.zero')
//=> ["app", "users.zero"]

arr = dotsplit('app.users')
//=> ["app", "users"]

答案 2 :(得分:1)

你可以试试这个正则表达式:(\w+(?:\.one|\.zero)?)\b

(?:\.one|\.zero)是一个与.one.zero匹配的非捕获组,其后面的问号表示它是可选的。

此外,您不需要在\b开头,因为\w+会贪婪地匹配。然而,它可以在末尾插入来处理像app.users.onetwo这样的字符串。