如何根据一些RegExp模式提取String的“部分”?

时间:2013-09-30 11:48:46

标签: javascript regex string

在JavaScript中,给定正则表达式模式和字符串:

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));

2 个答案:

答案 0 :(得分:2)

使用捕获组:

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

您将获得一个包含3个元素的数组:

  1. 整场比赛;

  2. 12

  3. 34

  4. 您可以使用.slice(1)删除第一个元素:

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

答案 1 :(得分:2)

在Regex中,您可以使用括号来分隔“捕获组”。然后可以从您的比赛中检索这些内容。还应该注意的是,正则表达式是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"]