正则表达式找到模式,返回子模式

时间:2013-08-10 15:35:37

标签: javascript regex

 var s = "lala url(ok) tee hee url( oh ya ) kk";
 s.match( /url(([^)]+))/g );

从's'我试图提取:

 ['ok', ' oh ya ']

但是,得到:

 ["url(ok", "url( oh ya "]

我可以遍历该列表并删除'url(',但我怀疑一些正则表达式也可以删除它。

4 个答案:

答案 0 :(得分:2)

在其他语言的正则表达式中支持lookbehind,使用正则表达式(?<=url\()(([^)]+))

但遗憾的是,javascript正则表达式不支持this example之类的lookbehind,所以你必须迭代它。除非你真的不需要包含 url 这个词。

答案 1 :(得分:1)

您需要将第一组括号转义为

 s.match( /url\(([^)]+)\)/g );

请注意,okoh ya将成为捕获组的一部分,而不是直接匹配。

您可以将捕获组检索为:

var str = "lala url(ok) tee hee url( oh ya ) kk",
    re = /\(([^)]+)\)/g, match ;

while( (match = re.exec( str )) !== null )
    console.log( match[0] + " : " + match[1] );

/* Prints:
   url(ok) : ok
   url( oh ya ) :  oh ya 
*/

答案 2 :(得分:1)

即使在修复表达式后,当您使用g标志和.match时,捕获组捕获的值也不会包含在结果中。

但您仍然可以使用.exec获得所需内容:

var s = "lala url(ok) tee hee url( oh ya ) kk";
var pattern = /url\(([^)]+)\)/g;
var urls = [];
var match;
while(match = pattern.exec(s)) {
    // match is an array like ["url(ok)", "ok"]
    urls.push(result[1]);
}

// urls will be ["ok", " oh ya "]

在每次迭代中,match将是一个数组,其中包含完全匹配作为第一个元素,每个捕获组的值作为数组的进一步元素。

答案 3 :(得分:0)

取代:

s.match( /url(([^)]+))/g );

在:

s.match( /url\(([^)]+)\)/g );