Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/444.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript中的正则表达式拆分字符串_Javascript_Regex_String_Split - Fatal编程技术网

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添加了解释,我通常先发布代码,然后在编辑中添加详细信息。