2017-02-14 9 views
0

を返す[1]次のエラーが返されます。配列要素にアクセスするか、次の正規表現一致要素にアクセスし、該当するキャプチャを生じない場合、空の文字列

"".match(/(abc)/)[1] 

次のエラーを返す:

NoMethodError: undefined method `[]' for nil:NilClass

これを実行するために、より簡潔な1行の実装がありますか?

result = "".match(/(abc)/).nil? ? "" : "".match(/(abc)/)[1] 

私はマッチングコード**"".match(/abc/)**を繰り返し、しかも安全に最初のキャプチャグループにアクセスしたり、結果として空の文字列で失敗することを必要としない解決策を探しています。

[明確になるように編集]

次の文字列は、一致は "123" になります。

"abc123def".match(/abc([0-9]*)/)[1] => "123"

と "ABCDEF" ""

答えて

5

を返す必要がありそうですString#[]正規表現を引数として指定します。与えられた例

""[/abc/] 

"abc123def"[/(?<=abc)[0-9]*/] 
#⇒ "123" 
+0

'文字列#[]は'常にストリングのようなもののためであると推定されるが、それはまた、非常に柔軟です。 @ tadman確かに – tadman

+0

。 – mudasobwa

+0

明確でないことに対する謝罪。しかし、「abc123def」[/ abc([0-9] *)/] =>「abc123」 「abc123def」.match(/ abc([0-9] *)/)[1] => "123" –

関連する問題