我正在阅读this但我不明白。我有两个问题。
有什么区别([aeiou])
和[aeiou]
?
<\1>
是什么意思?
"hello".sub(/([aeiou])/, '<\1>') #=> "h<e>llo"
答案 0 :(得分:4)
这里documented:
如果替换是一个字符串,它将替换匹配的文本。它可能包含对格式为
"\d"
的模式的捕获组的反向引用,其中d
是一个组号,或"\k<n>"
,其中n
是一个组名。如果它是双引号字符串,则两个反向引用都必须以额外的反斜杠开头。但是,在替换中,特殊匹配变量(例如&$
)不会引用当前匹配。
字符类用方括号([,])分隔,并列出可能出现在匹配中该点的字符。 / [ab] /表示或b,而不是/ ab /表示a后跟b。
希望上面的定义明确了[aeiou]
是什么。
括号可用于捕获 。由n th 括号组括起的文本随后可以用n表示。在一个模式中使用反向引用\ n;在模式之外使用MatchData [n]。
希望上面的定义明确了([aeiou])
是什么。
([aeiou])
- 字符类[..]
中的任何字符(将首先从字符串"hello"
中找到)是\1
的值(第一个捕获组) )。在此示例中,\1
的值为e
,将由<e>
替换(如您定义的<\1>
)。这就是使用"h<e>llo"
方法从字符串hello
生成String#sub
的方式。
答案 1 :(得分:4)
您发布的文档说
它可能包含对模式的捕获组的反向引用 形式为“\ d”,其中d是组号,或“\ k”,其中n是一个组 名。
因此\1
匹配第一个()
组中捕获的内容,即[aeiou]
中的一个,然后在替换<\1>