用一个例子可以更好地解释这一点。我想实现这样的拆分:
two-separate-tokens-this--is--just--one--token-another
->
["two", "separate", "tokens", "this--is--just--one--token", "another"]
我天真地尝试了 str.split(/-(?!-)/)
并且它不会匹配第一次出现的双分隔符,但它会匹配第二个(因为它不是后跟分隔符):
[“two”、“separate”、“tokens”、“this-”、“is-”、“just-”、“one-”、“token”、“another”]
我有比遍历字符串更好的选择吗?
顺便说一下,下一步应该是将两个连续的定界符替换为一个,所以它有点像通过重复来转义定界符...所以最终结果将是这样的:
["two", "separate", "tokens", "this-is-just-one-token", "another"]
如果能一步到位,那就太棒了!
最佳答案
<罢工> str.match(/(?!-)(.*?[^\-])(?=(?:-(?!-)|$))/g);
罢工>
检查this fiddle 。罢工>
解释:
非贪婪模式(?!-)(.*?[^\-])
匹配不以短划线字符和模式开始和结束的字符串 (?=(?:-(?!-)|$))
要求此类匹配后跟单个短划线字符或行尾。改性剂 /g
部队功能match
查找所有事件,而不仅仅是一个(第一个)事件。
编辑 (根据 OP 的评论):
str.match(/(?:[^\-]|--)+/g);
检查 this fiddle 。
解释:
图案 (?:[^\-]|--)
将匹配非破折号字符或双破折号字符串。标志 +
表示应该尽可能多地乘以来自先前模式的这种匹配。改性剂 /g
部队功能match
查找所有事件,而不仅仅是一个(第一个)事件。
注意:
模式 /(?:[^-]|--)+/g
也适用于 Javascript,但 JSLint 需要转义 -
方括号内,否则报错。
关于javascript - 在 Javascript 中使用一次(而不是两次)分隔符拆分字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11939770/