基于多个分隔符拆分字符串

我试图通过引用如何将jquery中的字符串拆分为多个字符串作为分隔符来拆分基于多个分隔符的字符串

由于我决定遵循多个分隔符

var separators = [' ', '+', '-', '(', ')', '*', '/', ':', '?']; var tokens = x.split(new RegExp(separators.join('|'), 'g'));​​​​​​​​​​​​​​​​​ 

但是我收到了错误

 Uncaught SyntaxError: Invalid regular expression: / |+|-|(|)|*|/|:|?/: Nothing to repeat 

怎么解决?

正则表达式相关字符+, – ,(,),*,?所需的转义

 var x = "adfds+fsdf-sdf"; var separators = [' ', '\\\+', '-', '\\\(', '\\\)', '\\*', '/', ':', '\\\?']; console.log(separators.join('|')); var tokens = x.split(new RegExp(separators.join('|'), 'g')); console.log(tokens); 

http://jsfiddle.net/cpdjZ/

这应该工作:

 var separators = [' ', '+', '(', ')', '*', '\\/', ':', '?', '-']; var tokens = x.split(new RegExp('[' + separators.join('') + ']', 'g'));​​​​​​​​​​​​​​​​​ 

生成的正则表达式将使用正则表达式字符类: /[ +()*\/:?-]/g

这样你就不需要逃避任何事情了。

以下是完成同样事情的更简单方法。

 var tokens = x.split(new RegExp('[-+()*/:? ]', 'g'));​​​​​​​​​​​​​​​​​ 

请注意-必须先到(或被转义),否则它会认为它是range运算符(例如az

我认为你需要逃避+,*和?,因为它们在大多数正则表达式语言中都有特殊含义

这是因为像+*这样的字符在Regex中有特殊含义。

|更改您的加入 到|\ ,你应该没事,逃避文字。