正则表达式javascript只返回一个值而不是完全匹配

时间:2016-10-26 19:16:18

标签: javascript regex regex-lookarounds

我们如何在java脚本中查看java脚本中的内容?

RegEx适用于使用lookbehind的php解析器

这是使用php解析器工作的正则表达式。

 (?<=MakeName=)(.*?)([^\s]+)

这会产生值

(MakeName=)(.*?)([^\s]+)

这会产生匹配+值

从中提取值的xml响应。

<ModelName="Tacoma" MakeName="Tundra" Year="2015">

我只需要值

1 个答案:

答案 0 :(得分:0)

JavaScript中没有后悔。

如果您确定输入中存在属性MakeName,那么您可以使用此正则表达式:

/[^"]*(?!.*\sMakeName\s*=)(?="([^"]*"[^"]*")*[^"]*$)/

它抓取第一个不包含双引号的字符系列,并在其后紧跟双引号,在此之后跟随偶数个双引号直到输入结束(以确保我们匹配< em> inside 带引号的字符串),但MakeName= 不应该在匹配后的任何地方出现。

这当然仍然不是防弹,因为它会因某些边界情况而失败,例如单引号值。:

<ModelName="Tacoma" MakeName='Tundra' Year="2015">

如果需要,您可以通过重复相同的模式,然后基于单引号,并将两者与OR(|)组合来解决这个问题。

演示:

var s = '<ModelName="Tacoma" MakeName="Tundra" Year="2015">';

result = s.match(/[^"]*(?!.*\sMakeName\s*=)(?="([^"]*"[^"]*")*[^"]*$)/);

console.log(result[0]);