字符串#sub 中的 <\1> 是什么意思?



我正在读这篇文章,但我不明白。我有两个问题。

([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>

最新更新