我需要一些正则表达式帮助。这最后几个小时我一直在head头。我需要在缩小文件中匹配一些字符串。
示例字符串:
var a ='abc'; var b = 'http://a/that.dude.js/v1/'; var c = 'def'; var d = 'https://b/that.dude.js/v1/';
var basePath = "http://othersite/that.dude.js/v1/";
我想匹配包含的单引号或双引号内的全文that.dude.js/v1
。我试过了:
/('|").+that.dude.js\/v1\/('|")/g
...但是当同一行中有多个匹配项时,这与整行匹配。
我预期的比赛将是:
http://a/that.dude.js/v1/
https://b/that.dude.js/v1/
http://othersite/that.dude.js/v1/
这是我尝试过的:http : //regexr.com/3cv62
如果在双引号字符串内有单引号,则需要捕获引号定界符并使用后向引用来完全匹配相同的尾随定界符:
(['"])([^"'\s]*that\.dude\.js\/v1[^"'\s]*)\1
请参阅regex演示。
由于您具有网址,因此可以安全地将其与[^"'\s]*
(和"
,'
以及空格以外的一个或多个符号)进行匹配。正则表达式匹配:
(['"])
-前导引号定界符(捕获到组1中,以便我们可以匹配相同的尾随定界符)([^"'\s]*that\.dude\.js\/v1[^"'\s]*)
-第2组匹配
[^"'\s]*
-比其他0+符号"
,'
和空白that\.dude\.js\/v1
-- that.dude.js/v1
[^"'\s]*
-同上\1
-后导定界符与前导定界符相同结果将在第2组中:
var re = /(['"])([^"'\s]*that\.dude\.js\/v1[^"'\s]*)\1/g;
var str = 'var a =\'abc\'; var b = \'http://a/that.dude.js/v1/\'; var c = \'def\'; var d = \'https://b/that.dude.js/v1/\';\nvar basePath = "http://othersite/that.dude.js/v1/";';
var res = [];
while ((m = re.exec(str)) !== null) {
res.push(m[2]);
}
document.body.innerHTML = "<pre>" + JSON.stringify(res, 0, 4) + "</pre>";
请注意,要使其更加通用,可以使用经过调节的贪婪令牌:
(['"])((?:(?!\1).)*that\.dude\.js\/v1(?:(?!\1).)*)\1
^^^^^^^^^^^^ ^^^^^^^^^^^^
观看另一个演示
该(?:(?!\1).)
令牌将匹配不等于值由称为任何字符(多个),但换行\1
反向引用。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句