我希望用几个分隔符拆分一个字符串,但我想在返回的数组中包含分隔符。例如,我想用空格,赋值运算符和括号分割这个字符串"hello i=5 (goodbye)"
。我知道如何拆分该字符串的唯一方法是执行以下操作:"hello i=5 (goodbye)".split(/[\s=)(]/);
但返回的数组为["hello", "i", "5", "", "goodbye", ""]
。有没有办法在结果中包含分隔符?我希望它返回["hello", "i", "=", "5", "(", "goodbye", ")"]
感谢您的帮助!
答案 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, ), ]
诀窍是引入另一个分隔符,例如逗号。请注意,新分隔符不得出现在原始字符串中。