为什么会这样:
filename
=> "/Users/user/Desktop/work/arthouse/digitization/in-process/cat.jpg"
[4] pry(DigitizedView)> filename.gsub(/.*//,'')
=> "cat.jpg"
gsub
的第一个参数中的正则表达式是什么?我知道.*
是任意数量的任何字符...但是反斜杠是什么?为什么它会删除除cat.jpg
部分之外的所有内容?
也
"cat.jpg".scan(/(w+)-(d+)([a-z]?)/)
=> []
该代码在做什么?
让我们来看看gsub
方法的第一个参数是什么意思,/.*//
。
第一个和最后一个斜杠/.../
表示我们在这里处理的是正则表达式,而不是字符串。
此正则表达式有两个部分。 .*
和/
.
.*
说 grep 任何字符,包括空字符。
/
说 grep 一个带斜杠的字符串,/
.
这个正则表达式会捕获,
['/', 'Users/', 'user/', 'Desktop/', 'work/', 'arthouse/', 'digitization/', 'in-process/']
所有这些字符串现在都替换为"。
除了末尾没有斜杠cat.jpg
。
希望解释有所帮助。
- 编辑
在第二部分中,/(w+)-(d+)([a-z]?)/
(w+)
:grep 一组单词字符(包括数字) -
: 破折号的格雷普 (d+)
:grep 一组数字 ([a-z]?)
: grep 表示零字符或单个字符。
cat.jpg 在很多方面都不适合这个正则表达式。没有破折号,.
在字符串中。等。
因此,scan
将返回一个空数组。
正则表达式/.*//
匹配以正斜杠结尾的零个或多个字符。String#gsub
方法将匹配模式的所有子字符串替换为替换值,在本例中为 ''
。
所以在这种情况下,模式匹配以下子字符串:'/'
、'Users/'
、'user/'
、'Desktop/'
、'work/'
、'arthouse/'
、'digitization/'
和'in-process/'
。它用一个空白字符串替换其中的每一个。它与剩余的子字符串不匹配,cat.jpg
,因为该子字符串不会以 '/'
终止。剩下的就是'cat.jpg'
了。