2013-09-30 30 views
0

在JavaScript中,給定一個正則表達式模式和串:如何根據某些RegExp模式提取字符串的「部分」?

var pattern = '/this/[0-9a-zA-Z]+/that/[0-9a-zA-Z]+'; 
var str = '/this/12/that/34'; 

如何返回包含數組:

['12', '34'] 

以下整個輸入字符串相匹配,因此返回它作爲一個整體。

var res1 = '/this/12/that/34'.match(/\/this\/[0-9a-zA-Z]+\/that\/[0-9a-zA-Z]+/)); 

以下匹配輸入字符串的所有「部分」。

var res2 = '/this/12/that/34'.match(/[0-9a-zA-Z]+/g)); 
+1

你可以使用這個..''/this/12/that/34'.match(/(\ d +)/克)'。 –

回答

2

使用捕捉組:

var res1 = '/this/12/that/34'.match(/\/this\/([0-9a-zA-Z]+)\/that\/([0-9a-zA-Z]+)/); 

你會得到一個包含三個元素的數組:

  1. 全場比賽;

  2. 12

  3. 34

你也可以使用.slice(1)刪除第一個元素:

var res1 = '/this/12/that/34'.match(/\/this\/([0-9a-zA-Z]+)\/that\/([0-9a-zA-Z]+)/).slice(1); 
+0

優秀,作品...謝謝 – Scholle

+0

@Sololle不客氣^^ – Jerry

2

在正則表達式,你可以使用括號來界定 「捕獲組」 。這些可以從你的比賽中檢索出來。還應該注意的是,正則表達式是JavaScript中的文字,你不能在它們周圍引用引號(而是使用斜線),並且你必須正確地轉義。

例如,如果你使用這個表達式:

var pattern = /\/this\/([0-9a-z]+)\/that\/([0-9a-z]+)/i; 
// that final "i" avoids the need to specify A-Z, it makes the regex ignore case 

現在,當你匹配它的字符串:

var match = str.match(pattern); 

你會看到如下頁面:

["/this/12/that/34","12","34"] 

注數組的第一個索引將永遠是你的整個比賽。您可以使用.shift切它關閉:

match.shift(); 

現在match樣子:

["12","34"]