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

时间:2013-10-11 08:23:23

标签: javascript jquery regex string split

我试图通过引用How split a string in jquery with multiple strings as separator

来分割基于多个分隔符的字符串

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

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

但我收到错误

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

如何解决?

6 个答案:

答案 0 :(得分:50)

正则表达式相关字符+, - ,(,),*,?

需要

转义

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/

答案 1 :(得分:7)

这应该有效:

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

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

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

答案 2 :(得分:5)

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

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

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

答案 3 :(得分:2)

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

答案 4 :(得分:1)

这是因为+*等字符在Regex中具有特殊含义。

将你的联接从|更改为|\,你应该没事,逃避文字。

答案 5 :(得分:1)

如果您想基于多个正则表达式进行拆分,并且不想编写大型正则表达式 您可以使用replacesplit。 像这样:

const spliters = [
	/(\[products\])/g,
	/(\[link\])/g,
	/(\[llinks\])/g,
];
let newString = "aa [products] bb [link] [products] cc [llinks] dd";
spliters.forEach(regex => {
	newString = newString.replace(regex, match => `æææ${match}æææ`);
});
const mySplit = newString.split(/æææ([^æ]+)æææ/)
console.log(mySplit);

这对我的情况很好。