1

我有一个这样的字符串:SPList:6E5F5E0D-0CA4-426C-A523-134BA33369D7?SPWeb:C5DD2ADA-E0C4-4971-961F-233789297FE9:

使用Javascript,我想提取两个ID(可以不同):6E5F5E0D-0CA4-426C-A523-134BA33369D7C5DD2ADA-E0C4-4971-961F-233789297FE9

我正在使用这个正则表达式:^SPList\:(?:[0-9A-Za-z\-]+)\?SPWeb\:(?:[0-9A-Za-z\-]+)\:$

我希望这个表达式能够将两个 ID 提取到两个匹配的组中。

到目前为止,我的代码是:

var input = "SPList:6E5F5E0D-0CA4-426C-A523-134BA33369D7?SPWeb:C5DD2ADA-E0C4-4971-961F-233789297FE9:";

var myregex = /^SPList\:(?:[0-9A-Za-z\-]+)\?SPWeb\:(?:[0-9A-Za-z\-]+)\:$/g;

var match = input.match(myregex);

var listId = match[0];
var webId = match[1];

但是,这并没有按预期工作。第一个匹配包含整个字符串,第二个匹配未定义。

提取我的 ID 的正确方法是什么?

这是一个说明我的问题的jsfiddle 。

4

2 回答 2

2

这应该适合您的需求:

var regex = /^SPList:([0-9A-F-]+)[?]SPWeb:([0-9A-F-]+):$/g;
var match = regex.exec(input);
var listId = match[1];
var webId = match[2];

我只是通过捕获组替换了初始正则表达式的非捕获组,并使用regex.exec(input)而不是input.match(regex)获取捕获的数据。此外,由于 ID 似乎是十六进制值,因此我使用A-FA-Z.

于 2013-02-20T10:30:55.903 回答
1

试试这个:

        var myregex = /[^\:]([0-9A-Z\-]+)[^\?|\:]/g;
        var match = input.match(myregex);
        alert("listID: " + match[1] + "\n" + "webID: " + match[3]);
于 2013-02-20T10:55:29.647 回答