レギュラー
- 正規表現、別名 "ルール表現"
- で使用されている「ルール」に文字列が適合しているかどうかを検出するように特別に設計された、独自の「ルール」を書いてください。
- 特殊文字や記号を使って「ルール式」を定義し、定義した「ルール式」を使って文字列が修飾されているかどうかを検出します。
var reg = /\d+/
var str1 = '123'
var str2 = 'abc'
console.log(reg.test(str1)) // true
console.log(reg.test(str2)) // false
- 上記の変数regはカスタマイズされたルールです。
- 文字列str1は、以下のルールに適合するものとして検出されます。
- 文字列str2がルールに適合しないことが検出されました。
正規表現の作成
- ルール」を作りたければ、人々が求める形で作らなければなりません。
- abcdefg/のように、//の真ん中に文字や記号を入れるものを正規表現と呼びます。
- 正規表現を作成するには 、リテラルと コンストラクタの2つの方法があります。
リテラルの作成
// 正規表現を作成するためのリテラルを以下に示す。
var reg = /abcdefg/
- この正規表現は、次の文字列をテストすることができます。
コンストラクタの作成
// 正規表現を作成するコンストラクタを以下に示す。
var reg = new RegExp('abcdefg')
console.log(reg) // /abcdefg/
- コンストラクタ・メソッドで作成されたものについても、リテラルで作成されたものと同じ結果が得られます。
正規表現内の記号
- 正規表現の作り方がわかったら、次は正規表現に関係する記号について詳しく説明しましょう。
メタ文字
. 改行以外の文字にマッチします。
\記号の翻訳、意味のある記号を意味のない文字に変換、意味のない文字を意味のある記号に変換。
\空白文字
\S : 空白以外の文字にマッチ
\d : マッチナンバー
\D:数字以外のマッチ
\w : 数字のアンダースコアにマッチします。
\W : 数字以外のアンダースコアにマッチします。
メタキャラクタを使えば、いくつかのルールを作るのは簡単です。
var reg = /\s/
var str = 'a b'
var str2 = 'ab'
console.log(reg.test(str)) // true
console.log(reg.test(str2)) // false
var reg = /\d/
var str = 'abc1'
var str2 = 'abc'
console.log(reg.test(str)) // true
console.log(reg.test(str2)) // false
var reg = /\w/
var str = 'a1'
var str2 = '#@$'
console.log(reg.test(str)) // true
console.log(reg.test(str2)) // false
リミッター
*: 前の内容が少なくとも0回繰り返される、つまり、 0回から正の無限 回現れる可能性があります。
+ : 前の内容が少なくとも1回繰り返されます。
? : 前の内容が0回または1回繰り返されます。
{n} : 前の内容がn回繰り返されます。
{n,}:前の内容が少なくともn回、つまり nから正の無限大まで 出現。
{n,m} : 前の内容が少なくともn回、多くてもm回、つまり n回からm 回出現。
修飾子はメタキャラクタと共に使用されます。
// 次の正規表現で、0~正の無限大の回数を検証する。
var reg = /\d*/
var str = 'abc'
var str2 = 'abc1'
var str3 = 'abc123'
console.log(reg.test(str)) // true
console.log(reg.test(str2)) // true
console.log(reg.test(str3)) // true
// 次の正規表現で、数字が 1 ~ 正の無限回発生することを確認する
var reg = /\d+/
var str = 'abc'
var str2 = 'abc1'
var str3 = 'abc123'
console.log(reg.test(str)) // false
console.log(reg.test(str2)) // true
console.log(reg.test(str3)) // true
// 次の正規表現で、数字が0であることを確認する~ 1 すべての時間は大丈夫だ...
var reg = /\d?/
var str = 'abc'
var str2 = 'abc1'
console.log(reg.test(str)) // true
console.log(reg.test(str2)) // true
// 次の正規表現は、数字が3回出現しなければならないことを検証する。
var reg = /\d{3}/
var str = 'abc'
var str2 = 'abc1'
var str3 = 'abc123'
console.log(reg.test(str)) // false
console.log(reg.test(str2)) // false
console.log(reg.test(str3)) // true
// 次の正規表現は、数字が3回から正の無限大に発生することを検証する。
var reg = /\d{3,}/
var str = 'abc'
var str2 = 'abc1'
var str3 = 'abc123'
var str4 = 'abcd'
console.log(reg.test(str)) // false
console.log(reg.test(str2)) // false
console.log(reg.test(str3)) // true
console.log(reg.test(str4)) // true
// 次の正規表現で、数字が3~5回しか出現しないことを確認する
var reg = /\d{3,5}/
var str = 'abc'
var str2 = 'abc1'
var str3 = 'abc123'
var str4 = 'abc12345'
console.log(reg.test(str)) // false
console.log(reg.test(str2)) // false
console.log(reg.test(str3)) // true
console.log(reg.test(str4)) // true
境界文字
^: 開始を示します。
は終了を示します。
境界文字は、文字列の開始と終了を区切るものです。
// 以下は、行頭から行末まで数字のみで、3~5回出現することを示している。
var reg = /^\d{3,5}$/
var str = 'abc'
var str2 = 'abc123'
var str3 = '1'
var str4 = ''
var str5 = '123'
var str6 = '12345'
console.log(reg.test(str)) // false
console.log(reg.test(str2)) // false
console.log(reg.test(str3)) // false
console.log(reg.test(str4)) // false
console.log(reg.test(str5)) // true
console.log(reg.test(str6)) // true
特殊記号
() : 要素の集合を制限
[]: 文字の集まり。つまり、[]の中に書かれた文字なら何でもよいということです。
[^] : 逆文字の集合で、[^]以外ならどれでも書けるという意味。
- 例:a-z は a から z までの文字。
または a|b は、a か b のどちらかの文字が使えるという意味です。
複数のシンボルを組み合わせて使用することが可能になりました。
// 簡単なメール認証
// _$冒頭で、任意の文字が少なくとも6回出現する。@シンボル、(|MSN|sina)これらのいずれか、1点、(com|net)いずれかの
var reg = /^[^_$].{6,}@(|MSN|sina)\.(com|net)$/
マーカー
i: 大文字と小文字が無視されることを示します。
- このiはルールの最後に書かれています。
- /w/i
- つまり、正規表現では大文字と小文字を区別しません。
g : グローバルマッチを示します。
- このgはルールの最後に書かれています。
- /w/g
- 英数字のアンダースコアとグローバルマッチします。
正規表現のメソッド
- レギュラーは
- 文字列の内容を検出し、キャプチャするために使用されます。
test
- テストは、文字列が規則性の基準に適合するかどうかをチェックするための基準です。
- 戻り値: boolean
- 戻り値:ブーリアン
console.log(/\d+/.test('123')) // true
console.log(/\d+/.test('abc')) // false
exec
- exec は条件にマッチした文字列の内容をキャプチャします。
- 構文:regular.exec(文字列)
- 返り値:文字列の中で規則性の条件を満たす最初の項目と、その他の情報を配列として返します。
var reg = /\d{3}/
var str = 'hello123world456こんにちは789'
var res = reg.exec(str)
console.log(res)
/*
["123", index: 5, input: "hello123world456こんにちは789", groups: undefined]
0: "123"
groups: undefined
index: 5
input: "hello123world456こんにちは789"
length: 1
__proto__: Array(0)
*/
- 配列の0番目の項目は、マッチした文字列の内容です。
- index属性は、マッチの元となる文字列のインデックスを示します。
文字列のメソッド
- 文字列には、正規表現でも使えるメソッドがいくつかあります。
search
- 検索とは、文字列の中に正規の条件を満たすものがあるかどうかを調べることです。
- 構文:string.search(regular)
- 戻り値 : インデックスがあれば開始、なければ-1
var reg = /\d{3}/
var str = 'hello123'
var str2 = 'hello'
console.log(str.search(reg)) // 5
console.log(str2.search(reg)) // -1
match
match 正規表現にマッチする文字列の内容を返します。
構文:string.match(regular)
戻り値:
- execメソッドは、g識別子を除いたexecメソッドと同じです。
- 識別子 g がある場合は、マッチした各項目の配列を返します。
var reg = /\d{3}/
var str = 'hello123world456'
var str2 = 'hello'
console.log(str.match(reg))
// ["123", index: 5, input: "hello123wor456", groups: undefined]
console.log(str2.match(reg)) // null
var reg = /\d{3}/g
var str = 'hello123world456'
var str2 = 'hello'
console.log(str.match(reg))
// ["123", "456"]
console.log(str2.match(reg)) // null
replace
- replace は、正規の条件を満たす文字列を置き換えます。
- 文法:
.replace(正規表現、置換する文字列) - 戻り値 : 置換後の文字列
var reg = /\d{3}/
var str = 'hello123world456'
var str2 = 'hello'
console.log(str.replace(reg)) // hello666world456
console.log(str2.replace(reg)) // hello
var reg = /\d{3}/g
var str = 'hello123world456'
var str2 = 'hello'
console.log(str.replace(reg)) // hello666world666
console.log(str2.replace(reg)) // hello





