Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.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 - Fatal编程技术网

javascript中的正则表达式和正则表达式特殊字符

javascript中的正则表达式和正则表达式特殊字符,javascript,regex,Javascript,Regex,我有以下代码: var html = "<div class='test'><b>Hello</b> <i>world!</i></div>"; var results = html.match(/<(\/?) (\w+) ([^>]*?)>/); var html=“你好,世界!”; var results=html.match(/]*?)>/); 关于三组括号: 第一个意思是:正斜杠或者什么都没有

我有以下代码:

var html = "<div class='test'><b>Hello</b> <i>world!</i></div>";
var results = html.match(/<(\/?) (\w+) ([^>]*?)>/);
var html=“你好,世界!”;
var results=html.match(/]*?)>/);
关于三组括号:

第一个意思是:正斜杠或者什么都没有

第二个意思:一个或多个字母数字字符

第三个意思是:除了“>”之外,我什么都不懂“*?”

还有,我如何解释有三组括号被空格分隔的事实

关于,

*
表示“尽可能匹配先前定义的文本”(可能为零个字符),
表示:刚好匹配,以便RegExp返回匹配

例如:

String:
Tester>

[^>]*
Tester

[^>]*?
<empty string>

[^>]*e
Teste

[^>]*?e
Te (Including T is required to produce a valid match)
字符串:
测试仪>
[^>]*
测试员
[^>]*?
[^>]*e
睾丸
[^>]*?e
Te(包括生成有效匹配所需的T)
在您的案例中:

String:
<input value=">"> junk

[^>]*>
<input value=">">

[^>]*?>
<input value=">
字符串:
废旧物品
[^>]*>
[^>]*?>
*
表示“尽可能匹配”(可能为零个字符)先前定义的文本,
表示:刚好匹配,以便RegExp返回匹配

例如:

String:
Tester>

[^>]*
Tester

[^>]*?
<empty string>

[^>]*e
Teste

[^>]*?e
Te (Including T is required to produce a valid match)
字符串:
测试仪>
[^>]*
测试员
[^>]*?
[^>]*e
睾丸
[^>]*?e
Te(包括生成有效匹配所需的T)
在您的案例中:

String:
<input value=">"> junk

[^>]*>
<input value=">">

[^>]*?>
<input value=">
字符串:
废旧物品
[^>]*>
[^>]*?>
星号(
*
)表示匹配前面的位零次或多次。前面的位是
[^>]
,表示除a>以外的任何内容。正如@user278064所说,
是冗余的。它旨在使
*
不贪婪,但没有必要,因为
[^>]
已经指定了
*
应该引用的内容。(您可以将
[^>]
替换为匹配任何字符的
(句号/句点),然后
将确保它匹配任何字符,直到

至于空间,他们不应该在那里。。。它们字面上匹配空格,我想你不需要。

星号(
*
)表示将前面的位匹配零次或多次。前面的位是
[^>]
,表示除a>以外的任何内容。正如@user278064所说,
是冗余的。它旨在使
*
不贪婪,但没有必要,因为
[^>]
已经指定了
*
应该引用的内容。(您可以将
[^>]
替换为匹配任何字符的
(句号/句点),然后
将确保它匹配任何字符,直到


至于空间,他们不应该在那里。。。它们实际上是匹配空格的,我想这不是你想要的。

*?
在regex中是一个“懒星”

星号表示“重复上一项零次或多次”。本例中的前一项是一个字符类,它定义了“除
>
以外的任何字符”

默认情况下,星号本身是“贪婪”的,这意味着它将匹配尽可能多的字符,同时仍然满足其周围表达式其余部分的条件

通过添加问号将其更改为懒星意味着它将尽可能少地匹配字符,同时仍然满足其余条件

在表达式的情况下,这实际上与实际结果没有任何区别,因为要在星号之后立即匹配的字符是一个
,与上一个匹配正好相反。这意味着表达式将始终为
[^>]*
匹配相同的结果,而不管它是懒惰的还是贪婪的

在其他正则表达式中,这种差异更为重要,因为贪婪表达式可以吞下字符串的某些部分,否则这些部分将在表达式中稍后匹配

但是,尽管结果可能没有差异,贪婪表达式和懒惰表达式之间可能仍然存在差异,因为处理它们的不同方式可能导致表达式以不同的速度运行。再说一次,我不认为这对你的情况会有什么不同,但在某些情况下,它会产生很大的影响


我建议您在上阅读regex,它有一个很好的参考表,列出了您可能需要的所有regex语法,以及关于许多困难主题的文章。

*?
在regex中是一个“懒星”

星号表示“重复上一项零次或多次”。本例中的前一项是一个字符类,它定义了“除
>
以外的任何字符”

默认情况下,星号本身是“贪婪”的,这意味着它将匹配尽可能多的字符,同时仍然满足其周围表达式其余部分的条件

通过添加问号将其更改为懒星意味着它将尽可能少地匹配字符,同时仍然满足其余条件

在表达式的情况下,这实际上与实际结果没有任何区别,因为要在星号之后立即匹配的字符是一个
,与上一个匹配正好相反。这意味着表达式将始终为
[^>]*
匹配相同的结果,而不管它是懒惰的还是贪婪的

在其他正则表达式中,这种差异更为重要,因为贪婪表达式可以吞下字符串的某些部分,否则这些部分将在表达式中稍后匹配

但是,尽管结果可能没有差异,贪婪表达式和懒惰表达式之间可能仍然存在差异,因为处理它们的不同方式可能导致表达式以不同的速度运行。再说一次,我不认为这对你的情况会有什么不同,但在某些情况下,它会产生很大的影响

我建议您在上阅读regex,它有一个很好的参考表,可以提供您可能需要的所有regex语法,以及许多关于