Javascript 与正则表达式匹配
我正在尝试获取此Javascript 与正则表达式匹配,javascript,regex,match,Javascript,Regex,Match,我正在尝试获取此url(和此)之间的信息 在这之前和之后可能还有其他事情,比如: background:url(images/backgrounds/bg_menu.jpg) center center no-repeat; background-size:cover 我想出了这个/(?=u)(?=r)(?=l)(?=\()。(=\)/,但它不起作用 我在尝试后尝试了:/(?=url\().*(=\)/我得到了我想要的,但是url(附带了它 有人能帮我吗?并详细解释正则表达式吗?有几种工作模式
url(
和此)
之间的信息
在这之前和之后可能还有其他事情,比如:
background:url(images/backgrounds/bg_menu.jpg) center center no-repeat; background-size:cover
我想出了这个/(?=u)(?=r)(?=l)(?=\()。(=\)/
,但它不起作用
我在尝试后尝试了:/(?=url\().*(=\)/
我得到了我想要的,但是url(
附带了它
有人能帮我吗?并详细解释正则表达式吗?有几种工作模式。最简单的一种是:
/url\(([^\)]*)\)/
首先,您可以逐字匹配url(
),然后创建一个捕获组()
,该捕获组可以在一行中多次匹配所有不是文本结束符([^\)]
)的内容(*
)
更难解释的是:
/url\((.*?)\)/
这也会从字面上匹配url(
)开始。然后创建一个捕获组,该组匹配所有内容,但会延迟。这会让您陷入灾难性的回溯,因为每次扩展都需要在前进之前检查字面上的右括号
还有一个小片段,基于
var候选者=[/url\(.*)\)/gi,/url\([^\)]*)\/gi];
var str='background:url(images/backgrounds/bg_menu.jpg)中心不重复;背景大小:cover';
就(候选人的)而言{
while((m=re.exec(str))!==null){
document.write(m[1]);//使用m[1],我们访问组1中的文本
文件。写(“
”);
}
}
有几种工作模式。最简单的是:
/url\(([^\)]*)\)/
首先,您可以逐字匹配url(
),然后创建一个捕获组()
,该捕获组可以在一行中多次匹配所有不是文本结束符([^\)]
)的内容(*
)
更难解释的是:
/url\((.*?)\)/
这也会从字面上匹配url(
)开始。然后创建一个捕获组,该组匹配所有内容,但会延迟。这会让您陷入灾难性的回溯,因为每次扩展都需要在前进之前检查字面上的右括号
还有一个小片段,基于
var候选者=[/url\(.*)\)/gi,/url\([^\)]*)\/gi];
var str='background:url(images/backgrounds/bg_menu.jpg)中心不重复;背景大小:cover';
就(候选人的)而言{
while((m=re.exec(str))!==null){
document.write(m[1]);//使用m[1],我们访问组1中的文本
文件。写(“
”);
}
}
为了匹配分隔符之间的内容,您可以使用延迟点匹配。如果其中有换行符,则需要使用JS中的[\s\s]
或[^]
进行延迟匹配
有关惰性点匹配的更多详细信息,请访问rexegg.com
下面是一个示例正则表达式:
/\burl\((.*?)\)/gi
看
在这里,我们将url(
)与url(
)进行匹配(由于\b
——一个单词边界,所以是一个完整的单词),这将确保我们只将url(
而不是curl(
)与url\(
)进行匹配,然后将它与最近的之间的内容进行匹配并捕获到与(.*)一起的第1组中
片段:
var re=/\burl\(.*?)/gi;
var str='background:url(images/backgrounds/bg_menu.jpg)中心不重复;背景大小:cover';
while((m=re.exec(str))!==null){
document.write(m[1]);//使用m[1],我们访问组1中的文本
}
为了匹配分隔符之间的内容,您可以使用延迟点匹配。如果其中有换行符,则需要使用JS中的[\s\s]
或[^]
进行延迟匹配
有关惰性点匹配的更多详细信息,请访问rexegg.com
下面是一个示例正则表达式:
/\burl\((.*?)\)/gi
看
在这里,我们将url(
)与url(
)进行匹配(由于\b
——一个单词边界,所以是一个完整的单词),这将确保我们只将url(
而不是curl(
)与url\(
)进行匹配,然后将它与最近的之间的内容进行匹配并捕获到与(.*)一起的第1组中
片段:
var re=/\burl\(.*?)/gi;
var str='background:url(images/backgrounds/bg_menu.jpg)中心不重复;背景大小:cover';
while((m=re.exec(str))!==null){
document.write(m[1]);//使用m[1],我们访问组1中的文本
}
你试过了吗?这就是你想要的吗?你能给我解释一下正则表达式吗?或者类似于/url\([^)]*)/
的东西-你不需要?=
到处都是。考虑到你所陈述的标准,我不相信目前接受的答案(由@stribizev提供)是正确的。@Roy:是正确的。在不支持lookbehinds的JS正则表达式中同时需要lookbehind和lookbeahed时,捕获机制是唯一的方法。你试过了吗?这就是你想要的吗?你能为我解释一下正则表达式吗?或者类似于/url\([^)]*)/
-你不需要到处都使用?=
。考虑到你所陈述的标准,我不相信目前接受的答案(作者@Stribizev)是正确的。@Roy:是正确的。在不支持lookbehinds的JS正则表达式中同时需要lookbehinds和lookbeahead时,捕获机制是唯一的选择。但是,惰性匹配会使您的后退/匹配失败次数显著增加……如果没有理由,否定字符类可能是更好的选择使用惰性点匹配。像)
也可能出现在块内。如果模式像/url\(.*?)\s/gi
或/url\(.*?);/gi
。为了更安全,我在url(
之前添加了单词边界,以确保我们只匹配url(
),而不是curl(
或hurl)(
等。这是否适用于.match()
?I