ikuma-t.

検索

RubyとJavaScriptにおける正規表現

に公開

正規表現系のメソッドがいつもごちゃごちゃになって、その場その場でリファレンスを見ているので、このタイミングでまとめてみます。

正規表現に対するメソッド体系

用途RubyJavaScript
正規表現のパターンにマッチした最初の部分を文字列に置換するString#subString.prototype.replace
正規表現のパターンにマッチしたすべての部分を文字列に置換するString#gsubString.prototype.replaceAll
正規表現のパターンにマッチする文字のインデックスを返すString#=~String.prototype.search
正規表現のパターンにマッチする文字列を返すString#match or Regexp#matchString.prototype.match
正規表現のパターンにマッチするかどうかをbooleanで返すString#match? or Regexp#match?RegExp.prototype.test
正規表現のパターンにマッチする文字列すべてを返すString#scanString.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

正規表現のパターンにマッチするかどうかをbooleanで返す

/.*-./.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オブジェクトを指定する必要がある。

ikuma-t

ikuma-t

ABOUT

9割笑顔、1割 (´・ω・) なエンジニア