Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/8.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 - Fatal编程技术网

使用javascript拆分时忽略正则表达式捕获组

使用javascript拆分时忽略正则表达式捕获组,javascript,regex,Javascript,Regex,我试图将一个字符串拆分为一个数组,并希望返回一个具有以下格式的数组:['a','b','c'] const code = "/*_ ex1.js */a/*_ ex2.js */b/*_ ex3.js */c" code.split(/\/\*_.+?\*\//) =>(这就是我想要的) 但是当我试图确保正则表达式与新行一起工作时 code.split(/\/\*_(.|\s)+?\*\//) =>(不是我想要的) 我不知道这些额外的空间是从哪里来的。这显然与括号内的捕获组有关,但我不知道如

我试图将一个字符串拆分为一个数组,并希望返回一个具有以下格式的数组:
['a','b','c']

const code = "/*_ ex1.js */a/*_ ex2.js */b/*_ ex3.js */c"
code.split(/\/\*_.+?\*\//)
=>(这就是我想要的)

但是当我试图确保正则表达式与新行一起工作时

code.split(/\/\*_(.|\s)+?\*\//)
=>(不是我想要的)


我不知道这些额外的空间是从哪里来的。这显然与括号内的捕获组有关,但我不知道如何避开它。

尝试使用
String.prototype.match()
RegExp
/[a-z](?=\/\n |$)/g
匹配字符类
a
z
,后跟
/
字符或换行符或输入结束

const code=“/*\uuex1.js*/a/*\uex2.js*/b/*\uex3.js*/c\n”
+“/*.-ex4.js*/d/*.-ex5.js*/e/*.-ex6.js*/f”;
var res=code.match(/[a-z](?=\/\n$)/g);

控制台日志(res)
split
包括输出中任何捕获组的内容。发件人:

如果分隔符是包含捕获括号的正则表达式,则每次匹配分隔符时,捕获括号的结果(包括任何未定义的结果)都会拼接到输出数组中

在您的例子中,
(.|\s)
是一个捕获组。因此,输出中将包含空格。解决此问题的最简单方法是使用
?:
将其设置为非捕获组:

code.split(/\/\*_(?:.|\s)+?\*\//)
                  ^^
这仍然会在结果数组中留下一个初始空字符串。(您的初始非多行版本也会这样做。)没有办法解决这个问题,因为拆分器正好位于字符串的开头,因此左侧的标记是空字符串。如果你想摆脱它,你可以过滤掉它:

.filter(Boolean)
code.split(/\/\*_(?:.|\s)+?\*\//)
                  ^^
.filter(Boolean)