我的问题是,我需要捕获一个脚本src,但我只有在src之前有一个脚本标记时才需要它。
所以这里遵循我的正则表达式和我尝试的选项
String: <script src="http://example.net"></script>
Regex: /(?:\<script[^]+src=("|'))([^]+)(?="|')/g
Match: <script src="http://example.net
第二个选项:
String: <script src="http://example.net"></script>
Regex: /(?!\<script[^]+src=("|'))([^]+)(?="|')/g
Match: script src="http://example.net
我需要得到的是:http://example.net
我非常感谢任何帮助。
这是我用于测试的工具:http://www.regexr.com/
谢谢,
答案 0 :(得分:1)
正则表达式不是解析HTML的正确工具,但为了解决问题,您可以在循环中使用exec()
方法来获取所有子匹配,然后将捕获的组的匹配结果推送到数组中
var s = '<script src="http://foo.net"></script><script src="http://bar.com"></script>';
var re = /<script[^>]+?src=['"]([^'"]+)['"]/g,
matches = [];
while (m = re.exec(s)) {
matches.push(m[1]);
}
console.log(matches) //=> [ 'http://foo.net', 'http://bar.com' ]
答案 1 :(得分:0)
据我所知,此语法[^]+
仅适用于旧版本的Internet Explorer (但也许适用于较新版本,您知道微软)并且意味着所有这些并非一无所有(即一切),一次或多次。
如果要匹配所有字符,直到标记的结尾和所需的属性之前,您需要使用惰性量词[^>]+?
(如您所见)。
对于第二个丑陋的[^]
,由于它位于引号之间,因此您只需将其替换为排除引号的[^"']
。
您需要的结果不是整个匹配,而是捕获组的内容。
<script[^>]+?src=["']([^"']+)["']
答案 2 :(得分:0)
不确定您正在尝试做什么或在哪里获得该语法。
如果您想要所有src
代码中script
属性的值,为什么不只搜索/<script[^>]*\ssrc="([^"]*)"/
并检查第一个子表达式匹配。
答案 3 :(得分:0)
这是你的开始:
/<script src=\"(.*)(?=\")/g
检索此表达式返回的第一个捕获组的值。
答案 4 :(得分:0)
这是regexr.com的结果:
String: <script src="http://example.net"></script>
Regex: /(?:<script src=")([^"]+)/g
group#1: http://example.net
以下是javascript代码示例:
s = '<script src="http://example.net"></script>';
url = s.split(/(?:<script src=")([^"]+)/g)[1];
由于javascript不支持lookbehind断言, - AFAIK - 您不能只匹配url并检查url之前是否有脚本标记。因此,作为lookbehind断言的替代方案,这是我所知道的最快速,最简单的解决方案。