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