Javascript Js ReGex非捕获组不工作

Javascript Js ReGex非捕获组不工作,javascript,regex,Javascript,Regex,我的问题是,我需要捕获一个脚本src,但只有当它在src之前有一个script标记时,我才需要获取它 下面是我的正则表达式和我尝试过的选项 String: <script src="http://example.net"></script> Regex: /(?:\<script[^]+src=("|'))([^]+)(?="|')/g Match: <script src="http://example.net 字符串: Regex:/(?:\据我所知,这

我的问题是,我需要捕获一个脚本src,但只有当它在src之前有一个script标记时,我才需要获取它

下面是我的正则表达式和我尝试过的选项

String: <script src="http://example.net"></script>
Regex: /(?:\<script[^]+src=("|'))([^]+)(?="|')/g
Match: <script src="http://example.net
字符串:

Regex:/(?:\据我所知,这种语法
[^]+
仅适用于旧版本的internet explorer(但可能也适用于新版本,您知道microsoft),并且一次或多次表示并非什么都是(即一切)

如果要匹配所有字符,直到标记的末尾,并且在所需属性之前,则需要使用带有惰性量词的
[^>]+?
(如您所见)

对于第二个丑陋的
[^]
,由于它位于引号之间,您只需将其替换为不包含引号的
[^”]

您需要的结果不是整个匹配,而是捕获组的内容

<script[^>]+?src=["']([^"']+)["']
]+?src=[“”]([^”]+)[“”]

正则表达式不是解析HTML的正确工具,但要解决此问题,可以在循环中使用该方法获取所有子匹配,然后将捕获组的匹配结果推送到数组中

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' ]
var s='';
变量re=/]+?src=['”]([^'”]+)['”]/g,
匹配项=[];
而(m=执行董事){
matches.push(m[1]);
}
console.log(匹配项)/=>http://foo.net', 'http://bar.com' ]

不确定你到底想做什么,也不确定你从哪里得到了这种语法


如果您希望在所有
脚本
标记中使用
src
属性的值,为什么不搜索
/]*\ssrc=“([^”]*)”/
并检查第一个子表达式匹配项。

以下是您的开始:

/<script src=\"(.*)(?=\")/g

/以下是regexr.com的结果:

String: <script src="http://example.net"></script>
Regex: /(?:<script src=")([^"]+)/g
group#1: http://example.net
字符串:

正则表达式:/(?):我已经在chrome、ff、safari和ie10上进行了测试,它是有效的,但我仍然不能将第一组排除在比赛之外。你说不能排除第一组是什么意思?我仍然不明白你在这里想做什么。。我想你不明白这个问题,我想忽略比赛中的第一组。我正在尝试获得一切,不是吗这是在src=”内,但它必须在script标记内,因为我收到一个巨大的字符串,其中包含许多带有src的html img标记。@Sakai:你不能,因为Javascript没有lookback功能。你需要使用capture group来“忽略”之前的内容。这到底是什么
应该在正则表达式中匹配?thx,这与我的正则表达式一起工作,我将尝试使用正则表达式来节省性能,但我现在将使用它,thx
String: <script src="http://example.net"></script>
Regex: /(?:<script src=")([^"]+)/g
group#1: http://example.net
s = '<script src="http://example.net"></script>';
url = s.split(/(?:<script src=")([^"]+)/g)[1];