JavaScript正则表达式基础
我正在尝试学习正则表达式,目前我已经从W3、Mozilla或其他网站的所有概述中获得了一个非常基本的理解,但当我浏览这本维基百科时,它给出了以下示例:JavaScript正则表达式基础,javascript,regex,Javascript,Regex,我正在尝试学习正则表达式,目前我已经从W3、Mozilla或其他网站的所有概述中获得了一个非常基本的理解,但当我浏览这本维基百科时,它给出了以下示例: "abbc".replace(/(.)\1/g, "$1") => "abc" 我不知道为什么这是真的(维基百科没有真正解释),但我自己尝试过,它确实去掉了第二个b。我知道\1是对捕获的组(.)的反向引用,但是。除了一个新行符号外,还有其他字符吗。。。这不也是第二个b吗?尝试一些变化也不能解决问题 "abbc".replace(/(.)/
"abbc".replace(/(.)\1/g, "$1") => "abc"
我不知道为什么这是真的(维基百科没有真正解释),但我自己尝试过,它确实去掉了第二个b。我知道\1是对捕获的组(.)的反向引用,但是。除了一个新行符号外,还有其他字符吗。。。这不也是第二个b吗?尝试一些变化也不能解决问题
"abbc".replace(/(.)/g, "$1") => "abbc"
"aabc".replace(/(.)*/g, "$1") => "c"
有人有关于Javascript正则表达式的深入教程吗(我看过几本书,它们非常通用于大约15种语言,没有真正强调Javascript)。第一本
匹配并捕获组1中的单个字符,因此(.)
匹配两个相同的字符,例如()\1
李>AA
- 在字符串中,此模式的唯一匹配项是
李>bb
- 通过将这两个字符
替换为组1捕获缓冲区bb
,即$1
b,我们将两个字符替换为一个,有效地删除了一个
b`
- 再次
匹配并捕获单个字符,将其捕获到组1李>()
- 模式依次匹配字符串中的每个字符李>
- 替换的是组1捕获缓冲区
,因此我们将每个字符替换为自身。因此,字符串保持不变李>$1
- 在这里,暂时忘记括号,
匹配整个字符串:这是匹配李>*
- 量词
表示每次匹配单个字符时,组1都会重置(不会创建新的组号,因为组编号是从左到右进行的)*
- 因此,对于匹配的每个字符,该字符将被捕获到组1,直到下一次捕获重置组1
- 组1的结束值是最后一次捕获的值,即最后一个字符
c
- 我们将匹配项(即整个字符串)替换为组1(即
),因此替换字符串为c
c
匹配并捕获组1中的单个字符,因此(.)
匹配两个相同的字符,例如()\1
李>AA
- 在字符串中,此模式的唯一匹配项是
李>bb
- 通过将这两个字符
替换为组1捕获缓冲区bb
,即$1
b,我们将两个字符替换为一个,有效地删除了一个
b`
- 再次
匹配并捕获单个字符,将其捕获到组1李>()
- 模式依次匹配字符串中的每个字符李>
- 替换的是组1捕获缓冲区
,因此我们将每个字符替换为自身。因此,字符串保持不变李>$1
- 在这里,暂时忘记括号,
匹配整个字符串:这是匹配李>*
- 量词
表示每次匹配单个字符时,组1都会重置(不会创建新的组号,因为组编号是从左到右进行的)*
- 因此,对于匹配的每个字符,该字符将被捕获到组1,直到下一次捕获重置组1
- 组1的结束值是最后一次捕获的值,即最后一个字符
c
- 我们将匹配项(即整个字符串)替换为组1(即
),因此替换字符串为c
c
- 第一个
With "abbc".replace(/(.)\1/g, "$1"), the result is "abc" because:
(.) references one character.
\1 references the first back reference
所以,它说的是“找到两个相同的字母”,并用引用替换它。因此,任何双精度字符都将匹配并被引用替换。分解时,这非常简单:
With "abbc".replace(/(.)\1/g, "$1"), the result is "abc" because:
(.) references one character.
\1 references the first back reference
所以,它说的是“找到两个相同的字母”,并用引用替换它。因此,任何加倍的字符都将匹配并被引用替换。准确地说,在第三个字符中,
(.)*
依次匹配每个单个字符,因此每个字符都会在短时间内成为$1
。@Jongware是的,没错。我添加了一篇关于组编号的优秀文章。仅供参考,您询问了其他资源,其中两篇链接文章来自一个网站,应该可以补充您已经看到的内容。非常感谢,这个深入的解释真的很有帮助。出于某种原因,我认为第二个表达式,为了给出它所做的输出,需要写成“abbc”。替换(/(.*)/g,“$1”)=>“abbc”
,按照它的编写方式,它似乎应该只返回“a”,而不是整个字符串…+1,因为答案中有很多细节@用户3334776:你能通过点击我答案左上角的勾号将答案标记为已接受吗?准确地说,在第三个选项中,()*
依次匹配每个字符,因此每个字符在短时间内都是$1
。@Jongware是的,没错。我添加了一篇关于组编号的好文章。仅供参考,您询问了其他资源,其中两篇链接文章来自一个网站,应该可以补充您已经看到的内容。非常感谢您