[英]Split a string based on multiple delimiters
我试图通过引用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
如何解决?
正则表达式相关字符 +,-,(,),*,?
var x = "adfds+fsdf-sdf";
var separators = [' ', '\\\+', '-', '\\\(', '\\\)', '\\*', '/', ':', '\\\?'];
console.log(separators.join('|'));
var tokens = x.split(new RegExp(separators.join('|'), 'g'));
console.log(tokens);
这应该有效:
var separators = [' ', '+', '(', ')', '*', '\\/', ':', '?', '-'];
var tokens = x.split(new RegExp('[' + separators.join('') + ']', 'g'));
生成的正则表达式将使用正则表达式字符类: /[ +()*\\/:?-]/g
这样你就不需要逃避任何事情。
以下将是完成同一件事的更简单的方法。
var tokens = x.split(new RegExp('[-+()*/:? ]', 'g'));
请注意-
必须先出现(或被转义),否则它会认为它是range
运算符(例如az
)
我认为您需要转义 +、* 和 ?,因为它们在大多数正则表达式语言中具有特殊含义
这是因为像+
和*
这样的字符在 Regex 中具有特殊含义。
从|
更改您的加入到|\\
,你应该没问题,转义文字。
如果您想基于多个正则表达式进行拆分并且不想编写大的正则表达式,您可以使用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);
这对我的情况非常有效。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.