2014-09-27 116 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