正規表現の書き方(メタ文字, 否定, OR条件, 繰り返し, エスケープなど)
最終更新日:

正規表現を活用すると大量の文章の中から、特定パターンの文字列を素早く見つけ出すことができます。ここでは、利用頻度の高い正規表現の書き方について利用例とともに紹介します。

正規表現の書き方

javascriptの利用例とともに正規表現について確認します。

下記例では、abcabc という 文字列 の中に、 ab という パターン にマッチする文字列が2つあることがわかります。

const pattern = /ab/g
const testText = 'abcabc'
console.log(testText.match(pattern))
// [ 'ab', 'ab' ]

^ $ ( 行頭・行末 )

^ は行頭にマッチします。

const pattern = /^ab/g
const testText = 'abcabc'
console.log(testText.match(pattern))
// [ 'ab' ]

$ は行末にマッチします。

const pattern = /bc$/g
const testText = 'abcabc'
console.log(testText.match(pattern))
// [ 'bc' ]

. ( 任意の一文字 )

. は任意の一文字とマッチします。

const pattern = /c.e/g
const testText = 'abcdefg'
console.log(testText.match(pattern))
// [ 'cde' ]

.. は任意の二文字とマッチします。

const pattern = /c..f/g
const testText = 'abcdefg'
console.log(testText.match(pattern))
// [ 'cdef' ]

[...] ( 括弧内のいずれかの一文字 )

[bcd]b c d のいずれか一文字とマッチします。

const pattern = /a[bcd]a/g
const testText = 'abaacaada'
console.log(testText.match(pattern))
// [ 'aba', 'aca', 'ada' ]

[^...] ( 括弧内の文字以外 )

[^c]c 以外の文字にマッチします。

const pattern = /a[^c]a/g
const testText = 'abaacaada'
console.log(testText.match(pattern))
// [ 'aba', 'ada' ]

[a-zA-Z0-9_] [ぁ-ん] [ァ-ヴ]

[a-z] は小文字アルファベットにマッチします。

const pattern = /[a-z]/g
const testText = 'abcABC012あいうアイウアイウ_'
console.log(testText.match(pattern))
// [ 'a', 'b', 'c' ]

[0-9] は数字にマッチします。

const pattern = /[0-9]/g
const testText = 'abcABC012あいうアイウアイウ_'
console.log(testText.match(pattern))
// [ '0', '1', '2' ]

[a-zA-Z0-9_] はアルファベット・数字・アンダーバーにマッチします。

const pattern = /[a-zA-Z0-9_]/g
const testText = 'abcABC012あいうアイウアイウ_'
console.log(testText.match(pattern))
// [ 'a', 'b', 'c', 'A', 'B', 'C', '0', '1', '2', '_' ]

[ぁ-ん] はひらがなにマッチします。

const pattern = /[ぁ-ん]/g
const testText = 'abcABC012あいうアイウアイウ_'
console.log(testText.match(pattern))
// [ 'あ', 'い', 'う' ]

[ァ-ヴ] はカタカナにマッチします。

const pattern = /[ァ-ヴ]/g
const testText = 'abcABC012あいうアイウアイウ_'
console.log(testText.match(pattern))
// [ 'ア', 'イ', 'ウ' ]

[ヲ-゚] は半角カタカナにマッチします。

const pattern = /[ヲ-゚]/g
const testText = 'abcABC012あいうアイウアイウ_'
console.log(testText.match(pattern))
// [ 'ア', 'イ', 'ウ' ]

* *? + +? ? ?? ( 繰り返し )

* は、直前文字0回以上繰り返しでマッチします。(最長一致)
*? は、直前文字0回以上繰り返しでマッチします。(最短一致)
+ は直前文字1回以上繰り返しでマッチします。(最長一致)
+? は直前文字1回以上繰り返しでマッチします。(最短一致)
? は直前文字0回 or 1回繰り返しでマッチします。(最長一致)
?? は直前文字0回 or 1回繰り返しでマッチします。(最短一致)

const pattern11 = /ab*c/g
const pattern21 = /ab+c/g
const pattern31 = /ab?c/g
const testText = 'acabcabbcabbbc'
console.log(testText.match(pattern11)) // [ 'ac', 'abc', 'abbc', 'abbbc' ]
console.log(testText.match(pattern21)) // [ 'abc', 'abbc', 'abbbc' ]
console.log(testText.match(pattern31)) // [ 'ac', 'abc' ]
const pattern11 = /ab*/g
const pattern12 = /ab*?/g
const pattern21 = /ab+/g
const pattern22 = /ab+?/g
const pattern31 = /ab?/g
const pattern32 = /ab??/g
const testText = 'acabcabbcabbbc'
console.log(testText.match(pattern11)) // [ 'a', 'ab', 'abb', 'abbb' ]
console.log(testText.match(pattern12)) // [ 'a', 'a', 'a', 'a' ]
console.log(testText.match(pattern21)) // [ 'ab', 'abb', 'abbb' ]
console.log(testText.match(pattern22)) // [ 'ab', 'ab', 'ab' ]
console.log(testText.match(pattern31)) // [ 'a', 'ab', 'ab', 'ab' ]
console.log(testText.match(pattern32)) // [ 'a', 'a', 'a', 'a' ]

{n} {n,} {n,m} ( 繰り返し回数指定 )

{1} は、直前文字1回繰り返しでマッチします。(最長一致)
{1,} は、直前文字1回以上繰り返しでマッチします。(最長一致)
{1,2} は、直前文字1回 or 2回繰り返しでマッチします。(最長一致)

const pattern1 = /ab{1}c/g
const pattern2 = /ab{1,}c/g
const pattern3 = /ab{1,2}c/g
const testText = 'acabcabbcabbbc'
console.log(testText.match(pattern1)) // [ 'abc' ]
console.log(testText.match(pattern2)) // [ 'abc', 'abbc', 'abbbc' ]
console.log(testText.match(pattern3)) // [ 'abc', 'abbc' ]

(...) ( グループ化 )

() で囲むことでグループ化できます。

(ab){2} とすることで、ab という文字列が2回繰り返される箇所にマッチします。

const pattern = /(ab){2}/g
const testText = 'ababcd ababab'
console.log(testText.match(pattern))
// [ 'abab', 'abab' ]

(ab){3} とすることで、ab という文字列が3回繰り返される箇所にマッチします。

const pattern = /(ab){3}/g
const testText = 'ababcd ababab'
console.log(testText.match(pattern))
// [ 'ababab' ]

| ( OR条件 )

(ab|cd)ab または cd にマッチします。

const pattern = /ab(ab|cd)/g
const testText = 'abcd abab'
console.log(testText.match(pattern))
// [ 'abcd', 'abab' ]

\d \w \s ( メタ文字 )

メタ文字 説明
\d 数字にマッチ。[0-9]と同じ。
\D 数字以外にマッチ。[^0-9]と同じ。
\w [a-zA-Z_0-9]と同じ。
\W [^a-zA-Z_0-9]と同じ。
\s 空白(タブ、改行、半角スペース)にマッチ
\S 空白(タブ、改行、半角スペース)以外にマッチ
\t タブ
\r 改行(CR)
\n 改行(LF)
WindowsとMacの改行について
Windows は \r\n(CRLF)です。Mac・Unix は \n(LF)です。

\ ( 直後の文字をエスケープ )

\ で直後の文字をエスケープできます。

const pattern = /\(abc\)/g
const testText = 'aaa(abc)aaa'
console.log(testText.match(pattern))
// [ '(abc)' ]

基本正規表現と拡張正規表現

Linuxで正規表現を利用するときには、 基本正規表現(BRE: basic-regexp)拡張正規表現(ERE: extended-regexp) の違いを意識する必要があります。

grepは、 デフォルトだと基本正規表現 になります。 -Eオプション を利用すると 拡張正規表現 で検索できます。

正規表現 コマンド
基本正規表現 grep sed
拡張正規表現 grep -E egrep sed -r awk
【エンジニア向け】仕事を見つける方法

転職する

転職エージェントを活用する

転職サイトの場合、自身でサイト上から企業を探す必要があります。 一方「レバテックキャリア」 などの転職エージェントの場合、エージェントが企業を紹介してくれます。エージェントが間に入ることにより、日程調整や、条件交渉などもサポートしてくれます。

転職ドラフトを活用する

転職ドラフト」は、 企業がITエンジニアをドラフトという形で指名するサービスです。年収が最初に提示されるなどのメリットがあります。 ただ、初回登録時にレジュメ作成が必要で、すでにエンジニア経験が豊富にあるエンジニア向けのサービスかと思います。 レジュメ作成が手間ですが、自身のキャリアを見直す機会になり、他の仕事探しにも役立つはずです。

エンジニア転職保証のあるスクールを活用する

ある程度、開発経験のあるかたであれば、独学で必要なスキルを身につけることができるはずです。ただ、別業種からエンジニアに転職したい場合など、1から独学で学ぶのはハードルが高いです。そういった方は、スクールの活用を検討しても良いと思います。 「TechAcademy」は、エンジニア転職保証コースを提供しています。給付金制度の対象講座として認定されているため、金銭面の負担も抑えることができます。

フリーランスとして活動する

レバテックフリーランス」「ITプロパートナーズ」「ギークスジョブ」は、フリーランスエージェントサービスです。 エージェントによって、支払いサイトなど細かい違いはありますが、まずは良い案件を見つけることが重要です。 登録自体は無料なので、複数エージェントに登録して、より多くの案件を紹介してもらうのがおすすめです。

logo
わくわくBank.
技術系の記事を中心に、役に立つと思ったこと、整理したい情報などを掲載しています。