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"]