1

我正在尝试通过以下字符数组拆分字符串:

"!", "%", "$", "@"

我考虑过使用正则表达式,所以我开发了以下方法,我认为它可以按字符拆分字符串:

var splitted = string.split(/\!|%|\$|@*/);

但是,当我运行以下代码时,输​​出被每个字符分割,而不是我希望的:

var toSplit = "abc%123!def$456@ghi";
var splittedArray = toSplit.split(/\!|%|\$|@*/);

我怎样才能使它splittedArray包含以下元素?

"abc", "123", "def", "456", "ghi"

任何帮助表示赞赏。

4

2 回答 2

3

@*匹配空字符串并且任意两个字符之间有一个空字符串,因此字符串在每个字符处被分割。改用+

/\!|%|\$|@+/

另外,如果您的意思是+应用于每个角色,而不仅仅是@将它们分组:

/(\!|%|\$|@)+/

或者更好的是,使用字符类。这使您可以省略反斜杠,因为这些字符在方括号内都不是特殊字符。

/[!%$@]+/
于 2012-12-18T22:37:30.293 回答
2

使用以下内容:

var splittedArray = toSplit.split(/[!%$@]+/);

您当前的代码将在每个字符之间拆分,因为@*将匹配空字符串。我假设因为您使用@*过您想将连续字符视为单个分隔符,这就是为什么在+正则表达式的末尾。这只会匹配一个或多个字符,因此不会匹配空字符串。

[...]语法是一个字符类,类似于字符的交替,只是|它仅适用于单个字符,因此[!%$@]将匹配!%$@。在字符类内部,转义规则有一点改变,所以你可以使用$代替\$.

于 2012-12-18T22:37:53.830 回答