41

我试图通过参考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 

如何解决?

4

6 回答 6

61

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

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/

于 2013-10-11T08:29:02.940 回答
12

这应该有效:

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

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

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

于 2013-10-11T08:32:07.613 回答
9

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

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

注意-一定要先出现(或者被转义),否则会认为是range操作符(例如a-z

于 2013-10-11T08:34:15.780 回答
2

我认为您需要转义 +、* 和?,因为它们在大多数正则表达式语言中具有特殊含义

于 2013-10-11T08:25:38.590 回答
1

这是因为字符喜欢+并且*在 Regex 中具有特殊含义。

|将您的加入从to更改为|\,您应该没问题,转义文字。

于 2013-10-11T08:26:10.367 回答
1

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

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);

这对我的情况非常有效。

于 2020-04-23T16:43:35.630 回答