如何匹配何时发生.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
答案 0 :(得分:2)
您可以将split
与带有negated look-ahead的正则表达式一起使用:
var output = input.split(/\.(?!(?:one|zero)(?:\.|$))/);
答案 1 :(得分:1)
您可以使用此正则表达式在拆分中使用否定前瞻:
/\.(?!(?:zero|one)\b)/
除了zero
或one
之后,每个DOT都将拆分。
<强>代码:强>
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
这样的字符串。