2014-09-27 361 views
0

我尝试获取00-8从其他字符串获取字符串匹配()

为什么这段代码不会返回我00-8?

<script> 

    var pageDetailsSecond = "a='00-8'b='13-'a+='00-2'b+='3333'c='4'"; 

    var phone1 = pageDetailsSecond.match("a='(.*)'"); 
    var phone1 = phone1[0]; 

    var card_Phone = phone1; 

    alert(card_Phone); 

</script> 

其实我得到a='00-8'

+0

检查,因为你试图以匹配包括= ... – Pieter21 2014-09-27 12:59:34

+0

检查我有些更完整回答下面 – Pieter21 2014-09-27 13:06:22

回答

0

因为你试图以匹配包括= ....

但是,当你找到它,你可以找到匹配的剥离它。

选中与的jsfiddle:http://jsfiddle.net/pbo5x9dx/

var pageDetailsSecond = "a='00-8'b='13-'a+='00-2'b+='3333'c='4'"; 
alert(pageDetailsSecond) 

var phones = pageDetailsSecond.match("a='(.*?)'"); 
var phone1 = phones[1];  
alert(phone1) 

**编辑:**修复了非贪婪匹配,与http://jsfiddle.net/pbo5x9dx/1/

+0

好,但如果我的字符串是下面的它不起作用:'a = '00 -8'b = '13 -'a + ='00-2'b + ='3333'c ='4''。 – roberto 2014-09-27 13:07:34

+0

那么你需要一个非贪婪的匹配*? iso * – Pieter21 2014-09-27 13:09:33

0

由于match()返回的数组将包含第一个数组插槽中的整个匹配,并且包含后续元素中的捕获组。

数组内容将是:

[ 
    [0] = "a='00-8'", 
    [1] = '00-8' 
] 

你想要的是phone1[1]而不是phone1[0],它包含您的捕获组(.*)指定的比赛只是一部分。


基于更新的问题,正则表达式模式应改为:

"a='(.*?)'" 

默认情况下,正则表达式模式尝试尽可能多的(被称为“贪婪”)相匹配。该模式被称“比赛任何'字符之间的任何字符数。现在,这包括00-8'b='13-'a+='00-2'b+='3333'c='4。通过添加?,这将改变行为‘懒’。换句话说,比赛为越好,和你的正则表达式是回只00-8像以前匹配。

+0

好,但如果我的字符串是下面的它不起作用:'a = '00 -8'b = '13 -'a + ='00-2'b + ='3333'c ='4''。或者,如果他们是另一件事... – roberto 2014-09-27 13:07:58

+0

假设你仍然想匹配'a ='后的引用内容,那么你应该修改你的正则表达式。看到我更新的答案。 – md4 2014-09-27 13:11:47