根据多个分隔符拆分字符串

Posted

技术标签:

【中文标题】根据多个分隔符拆分字符串【英文标题】:Split a string based on multiple delimiters 【发布时间】:2013-10-19 06:17:47 【问题描述】:

我试图通过引用 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 

如何解决?

【问题讨论】:

看这个:***.com/questions/650022/… 谁能帮我解决这个相关问题***.com/questions/19313874/… 【参考方案1】:

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

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/

【讨论】:

这很好用! new RegExp(separators.join('|'), 'g') 到底在做什么? @HussienK 在表达式中启用交替,看这里regular-expressions.info/alternation.html 男人。正则表达式。这就是为什么我花了这么长时间才真正学习它们的原因。为什么 + 在前面有三个斜杠,但 * 有两个斜杠,而 :、/ 和空格没有?【参考方案2】:

这应该可行:

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

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

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

【讨论】:

你能提供一个 var x 的例子吗? var arr = str.split(new RegExp('[|!=&+- ]', 'g'));- 错误【参考方案3】:

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

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

注意-必须在前(或被转义),否则会认为是range操作符(例如a-z

【讨论】:

【参考方案4】:

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

【讨论】:

【参考方案5】:

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

将您的联接从 | 更改为 |\,您应该可以避免文字。

【讨论】:

当我将其更改为 |\ 'Uncaught SyntaxError: Unexpected token ;' 时出现错误我认为这是因为当 |\ 在引号内输入时,引号被转义了。如何避免?【参考方案6】:

如果您想基于多个正则表达式进行拆分并且不想编写大的正则表达式 您可以使用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);

这非常适合我的情况。

【讨论】:

以上是关于根据多个分隔符拆分字符串的主要内容,如果未能解决你的问题,请参考以下文章

在 SSMS 中,我需要拆分多个列,根据逗号分隔保持数据有序

T-SQL基于分隔符拆分列并将拆分后的字符串数组输入到多个表列中

在Java中拆分多个分隔符[关闭]

如何拆分()关于多个分隔符的字符串? [复制]

将字符串拆分为具有多个分隔符的多个字符串而不删除?

如何在python中拆分具有多个分隔符的字符串? [复制]