Javascript 为什么RegExp split()和match()会给出不同的结果? s='abc123qweasdzxc' x=新的正则表达式(']*>|>|/>)','g') 控制台日志(s.match(x)) 控制台日志(s.split(x))

Javascript 为什么RegExp split()和match()会给出不同的结果? s='abc123qweasdzxc' x=新的正则表达式(']*>|>|/>)','g') 控制台日志(s.match(x)) 控制台日志(s.split(x)),javascript,regex,Javascript,Regex,输出为: [“”,,“”] [ '', '>', “abc”, “z=”asd“>”, '123', '/>', “qweasdzxc”] 为什么match()匹配整个表达式]*>|>|/>,而split()只匹配表达式的第一部分,即结果的差异是由于正则表达式中捕获的组造成的。如果使用非捕获组,则两个组的行为相同: [ '<w:p>', '<w:p z="asd">', '<w:p/>' ] [ '', '>', 'abc', ' z="a

输出为:

[“”,,“”]
[ '',
'>',
“abc”,
“z=”asd“>”,
'123',
'/>',
“qweasdzxc”]

为什么
match()
匹配整个表达式
]*>|>|/>
,而
split()
只匹配表达式的第一部分,即
结果的差异是由于正则表达式中捕获的组造成的。如果使用非捕获组,则两个组的行为相同:

[ '<w:p>', '<w:p z="asd">', '<w:p/>' ]
[ '',
  '>',
  'abc',
  ' z="asd">',
  '123',
  '/>',
  'qwe<w:paa>asd</w:p>zxc' ]
原因是
split
还将所有匹配的组放置在输出数组中

PS:您的正则表达式可以简化为:

console.log(s.split(x))
//=> ["", "abc", "123", "qwe<w:paa>asd</w:p>zxc"]
x=/]*>\/?>)/g
x=newregexp(']*>',g')
给予

console.log(s.match(x))=[“”,“”,“”,“”,“”,“”,“”]
console.log(s.split(x))=['',“abc”,“123”,“qwe”,“asd”,“zxc”]
x = new RegExp('<w:p(?: +[^>]*>|>|/>)','g')
console.log(s.split(x))
//=> ["", "abc", "123", "qwe<w:paa>asd</w:p>zxc"]
x = /<w:p( +[^>]*>|\/?>)/g
x = new RegExp('<\/?w:p[^>]*>', 'g')
console.log(s.match(x)) == ["<w:p>", "<w:p z="asd">", "<w:p/>", "<w:paa>", "</w:p>"]

console.log(s.split(x)) == ["", "abc", "123", "qwe", "asd", "zxc"]