0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【JS】正規表現で小文字のアルファベットのみ抜き出す方法

Last updated at Posted at 2020-12-09

正規表現とtestメソッドを使うことで合致した値を抜き出すことができる。

目次

  1. / /とtest
  2. 変数とtest
  3. RegExpとtest
  4. //とexec
  5. //とmatch

1. / /とtest

正規表現を表す/ /とtestメソッドを使った方法。

str = "aBc DeF 123 !!!"

res = []
for ( elem of str ){
    if( /[a-z]/.test(elem) ){
      res.push(elem)
    }
}

console.log(res) 
//["a", "c", "e"]

/[a-z]/.test(値)
値がアルファベットの小文字(a ~ z)ならtrueを返す。

・testメソッド
正規表現.test(値) 
結果はboolean。値が正規表現に一致していればtrueを返す。

・正規表現
/ /で囲んだ中身が正規表現となる。

[a-z]
a ~ zのいずれか1文字。

for( a of arr )
arrから一文字づつ抜き出し変数aに代入。
for(let i = 0; i < arr.length; i++){ arr[i] }と同じ。


## 2. 変数とtest No.1の正規表現を変数に置き換えることもできる。
str = "aBc DeF 123 !!!"
res = []

re = /[a-z]/
for ( elem of str ){
    if( re.test(elem) ){
        res.push(elem)
    }
}

console.log(res)
//["a", "c", "e"]

reはReguler Expression(正規表現)の略。


## 3. RegExpとtest `/ /`を`RegExp(" ")`に置き換えても正規表現となる。
str = "aBc DeF 123 !!!"

res = []
for ( elem of str ){
    if( RegExp("[a-z]").test(elem) ){
        res.push(elem)
    }
}

console.log(res)
//["a", "c", "e"]

`RegExp("[a-z]")` は `/[a-z]/` と同じ。
RegExpの中身
console.log(RegExp("[a-z]"))

/*
/[a-z]/
*/

RegExp("[a-z]")/[a-z]/と同様に変数に代入できる。


## 4. //とexec testメソッドではなくexecメソッドで同様の処理を行うこともできる。

正規表現.exec(値)
値が正規表現に一致すれば、その値を返す。一致しなければnullを返す。

これと、if(null)null は false になることを利用する。また、if(存在する値)はtrueになる。

str = "aBc DeF 123 !!!"
res = []

for ( elem of str ){
    if( /[a-z]/.exec(elem) ){
        res.push(elem)
    }
}


console.log(res)
// ["a", "c", "e"]

/[a-z]/.exec(elem)がsyntaxエラーになる場合は、/[a-z]/を変数に代入するか、RegExp("[a-z]".exec(elem))とすれば正規表現として認識される。


## 5. //とmatch execメソッドとよく似たmatchメソッドを使っても実現できる。

値.match(正規表現) = 正規表現.exec(値)

値が正規表現に一致すればその値を、一致しなければnullを返す。

str = "aBc DeF 123 !!!"

res = []
for( elem of str ){
    if( elem.match(/[a-z]/) ){
        res.push(elem)
    }
}

console.log(res)
//["a", "c", "e"]

今回は小文字のアルファベットを抜き出したが、正規表現を変更すれば、数値のみ抜き出したり、パターンが一致する場合に抜き出すことができる。
### 追記 @il9437さんよりシンプルな記述を教えていただきました。
str = "aBc DeF 123 !!!"

res = str.match(/[a-z]/g)
console.log(res)  // ["a", "c", "e"]

/[a-z]/g
フラグでg (global)をつけると、2番目、3番目にマッチする部分も検索する。

ない場合は初回で終了。

0
0
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?