2015-06-20 20 views
2

爲什麼第二個split在下面返回標點符號?爲什麼在正則表達式中使用圓括號會更改輸出?使用正則表達式的`String#split`方法的不同返回值

str = "This is a test string. Let's split it." 

str.split(/\. /) 
# =>["This is a test string", "Let's split it."] 

str.split(/(\.)/) 
# =>["This is a test string", ". ", "Let's split it."] 
+0

它與Ruby無關。這是正則表達式的行爲。同樣在Perl – texasbruce

+0

Aaaaah這和Yu的回答有很大的意義。謝謝。 – aceofbassgreg

+1

@texasbruce,它與Ruby有關。 'String#split()'被定義爲這樣做。 Ruby從perl中借用了很多東西,所以perl也定義了split()來做到這一點。 – 7stud

回答

1

因爲第二個代碼使用包含組的正則表達式。從String#split

如果圖案是Regexpstr劃分的模式相匹配的位置。只要模式匹配一​​個零長度的字符串,str就會被分割成單獨的字符。 如果模式包含組,則相應的匹配也會返回到數組中。