为了澄清,这里about_regular_expressions.rb是我遇到问题的文件中的确切问题:
def test_sub_is_like_find_and_replace
assert_equal __, "one two-three".sub(/(t\w*)/) { $1[0, 1] }
end
Run Code Online (Sandbox Code Playgroud)
我知道答案是什么,但我不明白为了得到答案会发生什么.我对Ruby和regex都很陌生,特别是我对大括号之间的代码以及它是如何发挥作用感到困惑.
mu *_*ort 11
大括号内的代码是sub用于替换匹配的块:
在块形式中[...]块返回的值将替换每次调用的匹配.
块接收所述匹配作为参数,但通常的正则表达式的变量($1,$2,...)也可提供.
在这种特定情况下,$1块内部"two"和数组符号提取第一个字符$1("t"在这种情况下).因此,块返回"t"并用just sub替换"two"原始字符串中的"t".
| 归档时间: |
|
| 查看次数: |
868 次 |
| 最近记录: |