当exec正则表达式时,php matchall喜欢javascript中的函数

时间:2012-11-15 02:51:13

标签: javascript regex

如果问题重复,我们很抱歉

我有一个XML文件,比如

<item>
   <attr1>attr1.1</attr1>
   <attr2>attr1.2</attr2>
</item>
...
<item>
   <attr1>attr2.1</attr1>
   <attr2>attr2.2</attr2>
</item>

我想要做的就是使用正则表达式获取一个项目数组。出于某种原因,我不想在这里使用jQuery(我已经阅读了jQuery.parseXML)。 你能告诉我如何在javascript中获取所有项目或其他东西,就像PHP中的match_all()一样。 这是我的正则表达式,

 /<item>([\w\W]+?)<\/item>/

谢谢!

2 个答案:

答案 0 :(得分:0)

正如zerkms所提到的,已经有了在javascript中解析XML的方法,它提供了更大范围的健壮性和灵活性。试图用正则表达式解析常规语言的超集的问题还有一个particularly infamous答案,简而言之,这不是解决这个问题的最佳方法。

但是,如果你对这个用例感兴趣,很遗憾没有像python的find中的match_all或者python中的findall这样的功能。看看this stackoverflow,特别是代码块

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);
}

在第一个答案中找到了以类似方式查找同一个正则表达式的多次出现的一些细节。

答案 1 :(得分:0)

模仿此类行为的一种方法是在正则表达式的替换方法中使用回调函数来构建结果。这是一个方便地抽象成函数的例子......

function match_all(pattern, input){
    var result = [];
    input.replace(pattern, function(_, val){ result.push(val); })
    return result;
}

...用样本xml检查出来......

var sample = "<item>\n\
   <attr1>attr1.1</attr1>\n\
   <attr2>attr1.2</attr2>\n\
</item>\n\
...\n\
<item>\n\
   <attr1>attr2.1</attr1>\n\
   <attr2>attr2.2</attr2>\n\
</item>"

console.log(match_all(/<item>([\w\W]+?)<\/item>/gm, sample))
// [
//    "↵   <attr1>attr1.1</attr1>↵   <attr2>attr1.2</attr2>↵",
//    "↵   <attr1>attr2.1</attr1>↵   <attr2>attr2.2</attr2>↵"
// ]