0

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

2 回答 2

2

使用捕获组:

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

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

  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);
于 2013-09-30T11:51:13.103 回答
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"]
于 2013-09-30T11:52:21.067 回答