通过分隔符拆分字符串,但在返回数组中包含分隔符

时间:2013-02-09 00:12:38

标签: javascript regex split

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

感谢您的帮助!

3 个答案:

答案 0 :(得分:3)

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

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

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

答案 1 :(得分:0)

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

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

对于lookbehind,要选择metch后面的空字符串,请使用one of these methods

希望这会有所帮助!!

答案 2 :(得分:0)

"hello i=5 (goodbye)".replace(/[\s=)(]/g, function(a){return ","+a+","}).split(/,/);

输出:

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

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