JavaScript中的正则表达式拆分字符串
我正在尝试按以下字符数组拆分字符串:JavaScript中的正则表达式拆分字符串,javascript,regex,string,split,Javascript,Regex,String,Split,我正在尝试按以下字符数组拆分字符串: "!", "%", "$", "@" var splitted = string.split(/\!|%|\$|@*/); 我考虑过使用正则表达式,所以我开发了以下方法,我认为可以将字符串按字符分割: "!", "%", "$", "@" var splitted = string.split(/\!|%|\$|@*/); 但是,当我运行以下代码时,输出被每个字符分割,而不是我所希望的: var toSplit = "abc%123!def$456@
"!", "%", "$", "@"
var splitted = string.split(/\!|%|\$|@*/);
我考虑过使用正则表达式,所以我开发了以下方法,我认为可以将字符串按字符分割:
"!", "%", "$", "@"
var splitted = string.split(/\!|%|\$|@*/);
但是,当我运行以下代码时,输出被每个字符分割,而不是我所希望的:
var toSplit = "abc%123!def$456@ghi";
var splittedArray = toSplit.split(/\!|%|\$|@*/);
如何使splittedArray
包含以下元素
"abc", "123", "def", "456", "ghi"
感谢您的帮助。
@*
匹配空字符串,并且任意两个字符之间都有一个空字符串,因此该字符串在每个字符处拆分。改用+
:
/\!|%|\$|@+/
另外,如果您的意思是将+
应用于每个字符,而不仅仅是@
,请将它们分组:
/(\!|%|\$|@)+/
或者更好的是,使用字符类。这样可以省略反斜杠,因为这些字符在方括号内都不是特殊的
/[!%$@]+/
@*
匹配空字符串,并且任意两个字符之间都有一个空字符串,因此该字符串在每个字符处拆分。改用+
:
/\!|%|\$|@+/
另外,如果您的意思是将+
应用于每个字符,而不仅仅是@
,请将它们分组:
/(\!|%|\$|@)+/
或者更好的是,使用字符类。这样可以省略反斜杠,因为这些字符在方括号内都不是特殊的
/[!%$@]+/
使用以下命令:
var splittedArray = toSplit.split(/[!%$@]+/);
当前代码将在每个字符之间拆分,因为@*
将匹配空字符串。假设您使用<代码> @*>代码>,您想把连续字符看作单个分隔符,这就是为什么<代码> +>代码>在正则表达式结尾的原因。这将只匹配一个或多个字符,因此它不会匹配空字符串
[…]
语法是一个字符类,它类似于与|
字符的交替,只是它只适用于单个字符,因此[!%$@
将匹配其中一个代码>、%
、$
或@
。在character类内部,转义规则会发生一些变化,因此您可以使用$
而不是\$
使用以下命令:
var splittedArray = toSplit.split(/[!%$@]+/);
当前代码将在每个字符之间拆分,因为@*
将匹配空字符串。假设您使用<代码> @*>代码>,您想把连续字符看作单个分隔符,这就是为什么<代码> +>代码>在正则表达式结尾的原因。这将只匹配一个或多个字符,因此它不会匹配空字符串
[…]
语法是一个字符类,它类似于与|
字符的交替,只是它只适用于单个字符,因此[!%$@
将匹配其中一个代码>、%
、$
或@
。在character类内部,转义规则会有一点变化,因此您可以使用$
而不是\$
@T.J.Crowder添加了解释,我通常先发布代码,然后在编辑中添加详细信息。@T.J.Crowder添加了解释,我通常先发布代码,然后在编辑中添加详细信息。