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

本问题已经有最佳答案,请猛点这里访问。

对不起,如果问题重复了

我有一个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);

}

在第一个答案中,以相似的方式发现相同的正则表达式的许多出现的一些细节。

:)谢谢你的回答!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值