php matchall like function in javascript when exec Regex
本问题已经有最佳答案,请猛点这里访问。
对不起,如果问题重复了
我有一个XML文件,类似于
1 2 3 4 5 6 7 8 9 | <item> attr1.1</attr1> attr1.2</attr2> </item> ... <item> attr2.1</attr1> attr2.2</attr2> </item> |
我要做的就是使用regex获取一个项目数组。出于某种原因,我不想在这里使用jquery(我已经阅读过jquery.parsexml)。你能给我演示一下如何在JavaScript中获取所有的项或其他东西,比如在PHP中匹配_All()。这是我的瑞格鞋,
1 | /<item>([\w\W]+?)<\/item>/ |
谢谢您!
模拟这种行为的一种方法是在regex的replace方法中使用回调函数来构建结果。下面是一个方便地抽象成函数的例子…
1 2 3 4 5 | function match_all(pattern, input){ var result = []; input.replace(pattern, function(_, val){ result.push(val); }) return result; } |
…用示例XML检查它…
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | var sample ="<item> \ attr1.1</attr1> \ attr1.2</attr2> \ </item> \ ... \ <item> \ attr2.1</attr1> \ attr2.2</attr2> \ </item>" console.log(match_all(/<item>([\w\W]+?)<\/item>/gm, sample)) // [ // "? attr1.1</attr1>? attr1.2</attr2>?", // "? attr2.1</attr1>? attr2.2</attr2>?" // ] |
正如zerkms所提到的,已经有了在javascript中解析XML的方法,它们提供了更大的健壮性和灵活性。对于试图用正则表达式解析正则语言的超集的问题,还有一个特别臭名昭著的答案,简而言之,这不是最好的解决方法。
但是,如果您对这个用例感兴趣,不幸的是,在Python的re中没有类似于match_all来自php或findall的功能。看看这个stackoverflow,特别是代码块
1 2 3 4 5 | var str ="I learned to play the Ukulele in Lebanon." var regex = /le/gi, result, indices = []; while ( (result = regex.exec(str)) ) { indices.push(result.index); } |
在第一个答案中,以相似的方式发现相同的正则表达式的许多出现的一些细节。