为了账号安全,请及时绑定邮箱和手机立即绑定

如何在JavaScript中使用类似于PHP的preg_match_all()的正则表达式匹配

如何在JavaScript中使用类似于PHP的preg_match_all()的正则表达式匹配

倚天杖 2019-08-31 11:10:15
我试图解析是由由两种分离的key = value对的URL编码的字符串&或&。以下内容仅匹配第一次出现,将键和值分解为单独的结果元素:var result = mystring.match(/(?:&|&)?([^=]+)=([^&]+)/)字符串'1111342 = Adam%20Franco&348572 = Bob%20Jones'的结果将是:['1111342', 'Adam%20Franco']使用全局标志'g'将匹配所有匹配项,但仅返回完全匹配的子字符串,而不是分离的键和值:var result = mystring.match(/(?:&|&)?([^=]+)=([^&]+)/g)字符串'1111342 = Adam%20Franco&348572 = Bob%20Jones'的结果将是:['1111342=Adam%20Franco', '&348572=Bob%20Jones']虽然我可以&单独拆分字符串并分别拆分每个键/值对,但是有没有办法使用JavaScript的正则表达式支持来匹配模式的多次出现,/(?:&|&)?([^=]+)=([^&]+)/类似于PHP的preg_match_all()函数?我的目标是通过某种方式获得结果,子匹配分开如下:[['1111342', '348572'], ['Adam%20Franco', 'Bob%20Jones']]要么[['1111342', 'Adam%20Franco'], ['348572', 'Bob%20Jones']]
查看完整描述

3 回答

?
慕后森

TA贡献1802条经验 获得超5个赞

您需要使用'g'开关进行全局搜索


var result = mystring.match(/(&|&)?([^=]+)=([^&]+)/g)


查看完整回答
反对 回复 2019-08-31
?
慕妹3242003

TA贡献1824条经验 获得超6个赞

如果你不想依赖于运行exec样式匹配所带来的“盲目匹配” ,那么JavaScript确实带有内置的全匹配功能,但它是replace函数调用的一部分,当使用“如何处理捕获”时小组“ 处理功能:


var data = {};


var getKeyValue = function(fullPattern, group1, group2, group3) {

  data[group2] = group3;

};


mystring.replace(/(?:&|&)?([^=]+)=([^&]+)/g, getKeyValue);

完成。


而不是使用捕获组处理函数来实际返回替换字符串(对于替换处理,a这里调用的第一个arg 是完整模式匹配,后续args是单独的捕获组,在这种情况下b是组1,c组2等)我们只需捕获第2组和第3组,并缓存该对。


因此,不要编写复杂的解析函数,请记住JavaScript中的“matchAll”函数只是用替换处理函数“替换”,并且可以获得很多模式匹配效率。


查看完整回答
反对 回复 2019-08-31
  • 3 回答
  • 0 关注
  • 1092 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信