Javascript 带星号量词的正则表达式
这说明了星号量词: 与前面的字符匹配0次或多次 它的工作原理如下:Javascript 带星号量词的正则表达式,javascript,regex,Javascript,Regex,这说明了星号量词: 与前面的字符匹配0次或多次 它的工作原理如下: var regex=/; var str=“”; console.log(str.match(regex)); 上面的结果是: 但是,当在下面的代码中尝试获取下面字符串中的所有“r”时,它只返回第一个“r”。为什么会这样 var regex = /r*/; var str = "rodriguez"; console.log(str.match(regex)); 为什么在第一个示例中,它会导致“前一个”字符/标记重复“0次或
var regex=/;
var str=“”;
console.log(str.match(regex));
上面的结果是:
但是,当在下面的代码中尝试获取下面字符串中的所有“r”时,它只返回第一个“r”。为什么会这样
var regex = /r*/;
var str = "rodriguez";
console.log(str.match(regex));
为什么在第一个示例中,它会导致“前一个”字符/标记重复“0次或更多次”,而在第二个示例中则不会重复?使用全局开关匹配字符串中任意位置的1个或多个r:
var regex = /r+/g;
在其他正则表达式中:
var regex = /<[A-Za-z][A-Za-z0-9]*>/;
var regex=/;
您正在匹配文本
使用全局开关匹配字符串中任意位置的1个或多个r:
var regex = /r+/g;
在其他正则表达式中:
var regex = /<[A-Za-z][A-Za-z0-9]*>/;
var regex=/;
您正在匹配文本
正则表达式引擎将首先尝试从左到右匹配rodriguez
中的r
,由于存在匹配,它将使用此匹配
然后,正则表达式引擎尝试匹配另一个r
,但下一个字符是o
,因此它停止在那里
如果没有全局标志g
(用作sovar regex=/r*/g;
),一旦正则表达式满足要求,正则表达式引擎将停止查找更多匹配项
尝试使用:
var regex = /a*/;
var str = "cabbage";
匹配将是一个空字符串,尽管字符串中有a
s!这是因为首先,正则表达式引擎尝试从左到右在colla
中查找a
,但第一个字符是c
。由于不匹配,正则表达式尝试匹配0次。因此,正则表达式得到满足,匹配到此结束
可能值得指出的是,*
单独是贪婪的,这意味着它将首先尝试匹配尽可能多的部分(描述中的“或更多”部分),然后再尝试匹配0次
要从rodriguez
获取所有r
,您需要前面提到的全局标志:
var regex = /r*/g;
var str = "rodriguez";
您将获得所有的r
,以及其中的所有空字符串,因为*
也匹配“nothing”
正则表达式引擎将首先尝试从左到右匹配rodriguez
中的r
,由于存在匹配,它将使用此匹配
然后,正则表达式引擎尝试匹配另一个r
,但下一个字符是o
,因此它停止在那里
如果没有全局标志g
(用作sovar regex=/r*/g;
),一旦正则表达式满足要求,正则表达式引擎将停止查找更多匹配项
尝试使用:
var regex = /a*/;
var str = "cabbage";
匹配将是一个空字符串,尽管字符串中有a
s!这是因为首先,正则表达式引擎尝试从左到右在colla
中查找a
,但第一个字符是c
。由于不匹配,正则表达式尝试匹配0次。因此,正则表达式得到满足,匹配到此结束
可能值得指出的是,*
单独是贪婪的,这意味着它将首先尝试匹配尽可能多的部分(描述中的“或更多”部分),然后再尝试匹配0次
要从rodriguez
获取所有r
,您需要前面提到的全局标志:
var regex = /r*/g;
var str = "rodriguez";
您将获得所有的r
,以及其中的所有空字符串,因为*
也与“nothing”匹配。谢谢。除了你提供的“如何”之外,你能解释一下“为什么”吗。*
的意思是“保持匹配直到它不正确”,正如g
lobal标志的意思是“在我们找到匹配后,开始寻找第二个匹配,然后是第三个匹配,等等”@robertrocha:检查我更新的答案以获得解释。当[a-z]*用于“rodriguez”时它返回整个字符串。即使“r”有几个重复。这是否意味着在*找到其第一个匹配项后,引擎是否会将自身重置为“a”并再次搜索,直到它针对下一个字符到达“z”?当您使用[a-z]*
时,它表示a到z范围内的任何字符中有0个或更多个。这将与abcde-123
中的abcde
匹配,但/^r*/
表示0个或更多的字母r
。如果输入为rrrrrrr-987
它将匹配rrrrr
,但不在rarbrrdr-987
中,因为r
字母不连续。谢谢。除了你提供的“如何”之外,你能解释一下“为什么”吗。*
的意思是“保持匹配直到它不正确”,正如g
lobal标志的意思是“在我们找到匹配后,开始寻找第二个匹配,然后是第三个匹配,等等”@robertrocha:检查我更新的答案以获得解释。当[a-z]*用于“rodriguez”时它返回整个字符串。即使“r”有几个重复。这是否意味着在*找到其第一个匹配项后,引擎是否会将自身重置为“a”并再次搜索,直到它针对下一个字符到达“z”?当您使用[a-z]*
时,它表示a到z范围内的任何字符中有0个或更多个。这将与abcde-123
中的abcde
匹配,但/^r*/
表示0个或更多的字母r
。如果输入是rrrrrrr-987
,它将匹配rrrrr
,但不在rarbrrdr-987
中,因为r
字母不连续。谢谢,我现在理解了背后的逻辑。谢谢,我现在理解了背后的逻辑。