javascript正規表現のまとめ

4173 ワード

SegmentFaultからの:wuplengyu
なぜ正規表現を使うのですか?
正規表現は、普通の文字と特殊な文字からなるテキストテンプレートで文字列のチェック、検索、置換を行います.javascriptの中で似ています.
/^1\d{10}$/
上記の簡単な正則は携帯番号にマッチします.正則表現には何の意味がありますか?「正規表現に精通している」という言葉で要約すればいいです.
​ 「コンピュータのソフトウェア分野の偉大な発明を羅列すれば、決して二十項を超えないと信じています.このリストには、もちろんパケット交換ネットワーク、Web、Lisp、ハッシュアルゴリズム、UNIX、コンパイル技術、関係モデル、オブジェクト、XMLといった有名な鼎の人物が含まれています.正則表現も決して漏れてはいけません.多くの実際の仕事にとっては、重要なものです.正則表現はまさに霊験あらたかな薬で、開発効率とプログラム品質を百倍に高めることができます.
正規表現の生成
javascriptで正規表現を生成する方法は二つあります.
1.RegExpオブジェクトの構造関数を呼び出します.
var reg = new RegExp('^[a-z]+[0-9]$', 'gi')
最初のパラメータは整合モードであり、2番目のパラメータはオプションパラメータ(g,i,m)であり、それぞれ大域一致、大域小文字のマッチング、複数行一致を指定するために使用されます.この方法は正規表現の実行時にコンパイルされます.を選択します.正規表現のモードが変更されることを知っている場合、またはどのようなパターンが事前に知られていません.別のソースから取得します.ユーザーが入力するように、これらの場合は構造関数を使用することができます.
2.正規表現のワード値を使用して、マッチモードを2つのスラッシュに閉じます.
var reg = /^[a-z]+[0-9]$/gi
表式が与えられている場合は、正規表現のコンパイルを字面量形式で提供し、正規表現が定数に保たれている場合は字面量方式を使用します.たとえば、サイクル中に字面量を使って正規表現を作成すると、正則表現は反復ごとにコンパイルされなくなります.
正規表現の構成
正規表現のテキストテンプレートは、複数の異なる種類の文字から構成されています.元文字、変換記号、限定文字、文字グループ、または構造、括弧グループを含みます.
メタ文字
文字
意味
...
行の区切り(n)以外のすべての文字にマッチします.
w
アルファベット、数字、または漢字にマッチします.
W
アルファベット、数字、漢字以外の文字とマッチします.
d
数値にマッチする
D
数字以外の文字をマッチさせる
s
任意の空白文字(f,n,r,t,v)にマッチします.
S
空白文字以外の任意の文字にマッチします.
b
単語の開始または終了にマッチします.
B
単語にマッチする非開始または終了
^
行頭に合わせる
$
行末に合わせる
変換記号
*+?|{()}^$菗と空白という文字には意味があります.例えば私たちはマッチします.
\{
限定符
文字
意味

0回から何回までマッチしますか?

一回から何回までマッチしますか?
?
0回または1回のマッチ
{2,}
少なくとも2回一致します
{10}
マッチング10回
{2,8}
少なくとも2回のマッチは8回です.
文字グループ[]
中かっこの文字グループは、括弧内の文字の一つにマッチします.
'fasfagxfasdfyfasfz'.split(/[xyz]/) //["fasfag", "fasdf", "fasf", ""]
もう一つの排除型文字グループがあります.
'xaxbycz'.split(/[^xyz]/) //["x", "x", "y", "z"]
または構造
例えば、c 124 dマッチングまたはd
/c|d/.test('af') // false
/c|d/.test('ad') // true
かっこグループ
(cd){1、}はcdcd.などと一致することができ、cdは一つのグループである.
/(cd){1,}$/.test('cdcd') //true
欲張りモードと非欲張りモード
デフォルトでは、限定語はすべて貪欲モードで、できるだけ多くの文字を捕獲することを表します.限定語の後に「?」を追加すると、貪欲モードではなく、できるだけ少なく文字を捕獲することを表します.
'ccccccd'.match(/c+/) //["ccccc"],     ,     
'ccccccd'.match(/c+?/) //["c"],      ,        
グループを捕獲
実際の応用の中で、私達はマッチングする文字列を得る必要があるかもしれません.例えば、文字列「万里の青空に浮かんでいる白い雲」を「万里の青空には白い雲が一つもない」に置き換えたいです.
"          ".replace(/(    )      /, '$1      ')
捕獲パケットは逆参照を作成します.jsでは$+numberまたは「逆斜棒」+number「表示法によって参照できます.
注意:反傾斜棒+numberのこのような参照は、正規表現で使用でき、異なる位置にマッチする同じサブストリングに使用できます.例えば、
'www.bai.bai.com'.replace(/([a-z]+)\.\1/, '$1') // www.bai.com
非キャプチャグループ
非キャプチャパケットは、通常、ペアの括弧によって加えられますか?:"サブ表現を加えて構成されています.非キャプチャパケットは、逆参照を作成しないと、括弧がないようになります.キャプチャパケットと非キャプチャパケットは、検索効率においても特に違いがありません.他のものよりも早いものはありません.
/^(?:\d+)/
正規表現の方法
test
文字列で指定されたサブストリングを検索して、ブール値を返します.
/^\d[a-zA-Z]{3}$/.test('1aac') // true
exec
配列を返します.最初の項目は最初の一致です.
/^\d[a-zA-Z]{3}$/.exec('1aac') // ["1aac"]
Stringは正規表現を使用する方法があります.
search
サブストリングの開始位置を返します.
'a12b2334c34'.search(/\d{4}/) // 4
match
マッチしたサブストリングを返します.
'a12b2334c34'.match(/\d{4}/) // ["2334"]
replace
マッチしたサブストリングを置換
'a12b2334c34'.replace(/\d{4}/, 'cccc') // "a12bccccc34"
スプリット
文字列を行列に分割します.
'a12b2334c34'.split(/\d{4}/) // ["a12b", "c34"]
言い‐きる
先に断言します(?=exp)
文字列の1つの位置を表します.位置の直後の文字列はexpにマッチします.
/f(?=234)/.test('123abcf234acd') //true
マイナス先行断言(?!exp)
文字列の一つの位置を表します.位置の直後の文字列はexpにマッチしません.
/f(?!234)/.test('123abcf234acd') //false