3

我希望将字符串拆分为多个分隔符,但我想在返回的数组中包含分隔符。例如,我想"hello i=5 (goodbye)"用空格、赋值运算符和括号分割这个字符串。我知道如何拆分该字符串的唯一方法是执行以下操作:"hello i=5 (goodbye)".split(/[\s=)(]/);但返回的数组是["hello", "i", "5", "", "goodbye", ""]. 有没有办法在结果中包含分隔符?我希望它返回["hello", "i", "=", "5", "(", "goodbye", ")"]

谢谢您的帮助!

4

3 回答 3

3

您可以match在单个正则表达式中使用和匹配您想要的符号和与您想要的符号不匹配的组:

"hello i=5 (goodbye)".match(/[\s=)(]|[^\s=)(]+/g)
// result: ["hello", " ", "i", "=", "5", " ", "(", "goodbye", ")"]

如果你想摆脱空间,你可以链接.filter(function(el){ return el.trim(); })到上面。

于 2013-02-09T00:22:03.290 回答
0
"hello i=5 (goodbye)".replace(/[\s=)(]/g, function(a){return ","+a+","}).split(/,/);

输出:

[hello,  , i, =, 5,  , , (, goodbye, ), ]

诀窍是引入另一个分隔符,例如逗号。请注意,新的分隔符不能出现在原始字符串中。

于 2013-02-09T00:34:57.117 回答
0

您可以使用前瞻,它在匹配字符之前选择一个空字符串。

/(?=[\s=)(])/

对于lookbehind,要选择匹配后的空字符串,请使用以下方法之一

希望这可以帮助!!

于 2013-02-09T00:23:43.573 回答