我试图通过引用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
如何解决?
答案 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);
答案 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)
如果您想基于多个正则表达式进行拆分,并且不想编写大型正则表达式
您可以使用replace
和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);
这对我的情况很好。