Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 与正则表达式匹配_Javascript_Regex_Match - Fatal编程技术网

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