我有一个这样的字符串:SPList:6E5F5E0D-0CA4-426C-A523-134BA33369D7?SPWeb:C5DD2ADA-E0C4-4971-961F-233789297FE9:
。
使用Javascript,我想提取两个ID(可能不同):6E5F5E0D-0CA4-426C-A523-134BA33369D7
和C5DD2ADA-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。
答案 0 :(得分: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-F
代替A-Z
。
答案 1 :(得分:1)
试试这个:
var myregex = /[^\:]([0-9A-Z\-]+)[^\?|\:]/g;
var match = input.match(myregex);
alert("listID: " + match[1] + "\n" + "webID: " + match[3]);