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