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(',但我怀疑一些正则表达式也可以删除它。
答案 0 :(得分:2)
在其他语言的正则表达式中支持lookbehind,使用正则表达式(?<=url\()(([^)]+))
但遗憾的是,javascript正则表达式不支持this example之类的lookbehind,所以你必须迭代它。除非你真的不需要包含 url 这个词。
答案 1 :(得分:1)
您需要将第一组括号转义为
s.match( /url\(([^)]+)\)/g );
请注意,ok
和oh 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 );