2013-09-30 31 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"]