正規表現系のメソッドがいつもごちゃごちゃになって、その場その場でリファレンスを見ているので、このタイミングでまとめてみます。
用途 | Ruby | JavaScript |
---|---|---|
正規表現のパターンにマッチした最初の部分を文字列に置換する | String#sub | String.prototype.replace |
正規表現のパターンにマッチしたすべての部分を文字列に置換する | String#gsub | String.prototype.replaceAll |
正規表現のパターンにマッチする文字のインデックスを返す | String#=~ | String.prototype.search |
正規表現のパターンにマッチする文字列を返す | String#match or Regexp#match | String.prototype.match |
正規表現のパターンにマッチするかどうかをbooleanで返す | String#match? or Regexp#match? | RegExp.prototype.test |
正規表現のパターンにマッチする文字列すべてを返す | String#scan | String.prototype.matchAll |
'ikuma-t, yamada-d, tanaka-p, okurag, tarou-d'.sub(/-/, '~')
#=> "ikuma~t, yamada-d, tanaka-p, okurag, tarou-d"
'ikuma-t, yamada-d, tanaka-p, okurag, tarou-d'.replace(/-/, '~')
// 'ikuma~t, yamada-d, tanaka-p, okurag, tarou-d'
'ikuma-t, yamada-d, tanaka-p, okurag, tarou-d'.gsub(/-/, '~')
#=> "ikuma~t, yamada~d, tanaka~p, okurag, tarou~d"
'ikuma-t, yamada-d, tanaka-p, okurag, tarou-d'.replaceAll(/-/g, '~')
// 'ikuma~t, yamada~d, tanaka~p, okurag, tarou~d'
JavaScriptのString.prototype.replaceAllを使用する際には、グローバルフラグを持つRegExpオブジェクトを指定する必要がある。
'ikuma-t' =~ /.*-./
# => 0
'ikumat' =~ /.*-./
# => nil
'ikuma-t'.search(/.*-./)
// 0
'ikumat'.search(/.*-./)
// -1
# Regexp#matchの方を使っています
/.*-./.match('ikuma-t')
# => #<MatchData "ikuma-t">
/.*-./.match('ikumat')
# => nil
'ikuma-t'.match(/.*-./)
// [ 'ikuma-t', index: 0, input: 'ikuma-t', groups: undefined ]
'ikumat'.match(/.*-./)
// null
/.*-./.match?('ikuma-t')
# => true
/.*-./.match?('ikumat')
# => false
/.*-./.test('ikuma-t')
// true
/.*-./.test('ikumat')
// false
'ikuma-t'.scan(/[aiueo]/)
# => ["i", "u", "a"]
['ikuma-t'.matchAll(/[aiueo]/g)]
// [ [ 'i', index: 0, input: 'ikuma-t', groups: undefined ], [ 'u', index: 2, input: 'ikuma-t', groups: undefined ], [ 'a', index: 4, input: 'ikuma-t', groups: undefined ] ]
JavaScriptのString.prototype.matchAllを使用する際には、グローバルフラグを持つRegExpオブジェクトを指定する必要がある。