本问题已经有最佳答案,请猛点这里访问。
对不起,如果问题重复了
我有一个XML文件,类似于
attr1.1
attr1.2
...
attr2.1
attr2.2
我要做的就是使用regex获取一个项目数组。出于某种原因,我不想在这里使用jquery(我已经阅读过jquery.parsexml)。你能给我演示一下如何在JavaScript中获取所有的项或其他东西,比如在PHP中匹配_All()。这是我的瑞格鞋,
/([\w\W]+?)/
谢谢您!
另外,这看起来并没有引起太多的注意,如果你认为我的答案正确的话,你应该把它放到可接受的堆栈上,而不是突出的堆栈上。继续堆溢出滴答!
模拟这种行为的一种方法是在regex的replace方法中使用回调函数来构建结果。下面是一个方便地抽象成函数的例子…
function match_all(pattern, input){
var result = [];
input.replace(pattern, function(_, val){ result.push(val); })
return result;
}
…用示例XML检查它…
var sample ="
\
attr1.1
\
attr1.2
\
\
...
\
\
attr2.1
\
attr2.2
\
"
console.log(match_all(/([\w\W]+?)/gm, sample))
// [
// "? attr1.1? attr1.2?",
// "? attr2.1? attr2.2?"
// ]
正如zerkms所提到的,已经有了在javascript中解析XML的方法,它们提供了更大的健壮性和灵活性。对于试图用正则表达式解析正则语言的超集的问题,还有一个特别臭名昭著的答案,简而言之,这不是最好的解决方法。
但是,如果您对这个用例感兴趣,不幸的是,在Python的re中没有类似于match_all来自php或findall的功能。看看这个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);
}
在第一个答案中,以相似的方式发现相同的正则表达式的许多出现的一些细节。
:)谢谢你的回答!