javascript - 在 Javascript 中使用一次(而不是两次)分隔符拆分字符串

标签 javascript regex split

用一个例子可以更好地解释这一点。我想实现这样的拆分:

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/

相关文章:

javascript - 如何从字符串数组中分割数字和字符串?

javascript - 带有 vue.js 的 img url

javascript - 如何在表单中添加按钮,在提交时检查必填字段但不刷新页面?

python - 我需要设置一个非常具体的正则表达式模式

php - 左侧的正则表达式不贪婪(即,两侧可能的最窄匹配)

PHP 在键值对中拆分字符串

javascript - 外部 JavaScript 和下拉菜单无法在浏览器中正确呈现

javascript - 父宽度和高度区域中的轻量级可拖动锁

javascript - RegEX 将 <div/foo> 替换为 </div>

PHP 拆分逗号分隔值但保留引号