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(”,但我怀疑一些正则表达式也可以删除它。
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(”,但我怀疑一些正则表达式也可以删除它。
在其他语言中,正则表达式支持通过使用像这样的正则表达式来向后看(?<=url\()(([^)]+))
但不幸的是,javascript regex 不支持像这个例子那样的lookbehind ,所以你必须迭代它。除非您真的不需要包含该url单词。
即使在修复表达式之后,当您使用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
将是一个数组,其中包含完整匹配作为第一个元素,每个捕获组的值作为数组的进一步元素。
您需要将第一组括号转义为
s.match( /url\(([^)]+)\)/g );
请注意,ok
andoh 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
*/
代替:
s.match( /url(([^)]+))/g );
上:
s.match( /url\(([^)]+)\)/g );