正規表現オブジェクトのJavaScript
1.はじめに
また、正規表現として知られている正規表現(正規表現)、コンピュータサイエンスの概念。正規表現は、一般的に、取得モデル(ルール)のものと行のテキストを置き換えるために使用されています。
Javascriptが使用RegExp
するオブジェクトは、正規表現の機能を提供します。
2つの方法で正規表現を作成します。
- ダイレクト量
- コンストラクタを使用して
// 使用直接量创建正则表达式,以"/"表示开始和结束
var regexp1 = /abc/;
// 使用构造函数创建正则表达式
var regexp2 = new RegExp("abc");
どちらのスペルバリアントが作成されたコンテンツは、abc
正規表現オブジェクト。しかし、コンパイラが作成されている直接のJavaScriptエンジンの量、およびコンストラクタで作成した正規表現オブジェクトで作成した正規表現オブジェクトによって実行時に作成されます。
RegExp
コンストラクタはまた、2番目のパラメータが修飾子を示して受け入れることができます。
var regexp3 = new RegExp("abc","im");
// 两者等价
var regexp4 = /abc/im;
2.正規表現のインスタンスオブジェクトのプロパティとメソッド
オブジェクトプロパティの2.1例
正規表現オブジェクトインスタンスの属性は、2つのカテゴリに分類されます。
- 関連修飾子の属性
ignoreCase
:かどうかを示すブール値を返しますi
修飾子を、読み取り専用です。global
:かどうかを示すブール値を返しますg
修飾子を、読み取り専用です。multiline
:かどうかを示すブール値を返しますm
修飾子を、読み取り専用です。flags
:読み取り専用、修飾を含む文字列が設定されている返します。
- これは、修飾子の属性とは何の関係もありません
lastIndex
:読み取りと書き込みができ、次の検索開始位置を表す整数を返します。source
:正規表現の文字列を返し、読み取り専用です。
var regexp5 = /test/igm;
// 与修饰符相关的属性(只读)
regexp5.ignoreCase; // true
regexp5.global; // true
regexp5.multiline; // true
regexp5.flags; // “gim”
// 与修饰符无关的属性
regexp5.lastIndex; // 0
regexp5.source; // “test”
実施例2.2 Methodオブジェクト
2.2.1 RegExp.prototype.test()
RegExp
オブジェクトの例としてtest
の方法は、現在のパラメータ文字列パターンと一致するかどうかを示すブール値を返します。
場合RegExp
のあるオブジェクトのインスタンスg
修飾子、それぞれ、test
開始位置合わせ方法の後方端からのものです。
var regexp6 = /Hello/;
regexp6.test("Hello World!"); // true
// 带有g修饰符的正则表达式对象
var regexp7 = /m/g;
var t = "m_m_m_mafl";
regexp7.lastIndex; // 0
regexp7.test(t); // true
regexp7.lastIndex; // 1
regexp7.test(t); // true
regexp7.lastIndex; // 3
regexp7.test(t); // true
regexp7.lastIndex; // 5
regexp7.test(t); // true
regexp7.lastIndex; // 7
regexp7.test(t); // false
g
時間修飾子は、正規表現オブジェクトにすることができlastIndex
、検索属性を開始する場所を指定しました。
var regexp8 = /m/g;
var t = "m_m_m_mafl";
// 指定lastIndex属性
regexp8.lastIndex = 7; // 指定从第7个位置开始搜索,返回false,lastIndex重置为0
regexp8.test(t); // false
regexp8.lastIndex = 0;
2.2.2 RegExp.prototype.exec()
RegExp
オブジェクトの例exec
マッチング結果を返す方法。一致が見つかった場合、それはそれ以外の場合はを返し、メンバーが正常に部分文字列を一致している配列を返しますnull
。
var regexp9 = /x/;
var regexp10 = /y/;
var s = "xadf";
regexp9.exec(s); // ["x", index: 0, input: "xadf", groups: undefined]
regexp10.exec(s); // null
上記のコードexec
配列を返す方法。配列は、2つの重要な属性が含まれています。
input
:元の文字列。index
:からのスタート位置の成功に一致する正規表現0
カウント開始。
3.文字列インスタンスオブジェクトのメソッド呼び出しの正規表現
文字列オブジェクトの例として、正規表現に関連するいくつかの方法があります。
String.prototype.match()
:すべての一致するサブストリングを含む配列を返します。String.prototype.search()
:正規表現検索で与えられ、それが位置マッチが始まった示す整数を返します。String.prototype.relace()
:代わりに与えられた正規表現によると、交換後の文字列を返します。String.prototype.split()
:指定された分割正規表現戻りアレイによれば、サブストリングのメンバーが分割されています。
3.1 String.prototype.match()
Stringオブジェクトのインスタンスmatch
メソッド、通常の文字列マッチング、マッチは成功したリターンのリターンに失敗したことを一致のリストですnull
。
正規表現場合g
修飾子、一回は成功した試合のすべての結果を返します。
var regexp11 = /x/;
var regexp12 = /y/;
var s = "xadf";
// 匹配成功,返回数组
s.match(regexp11); // ["x", index: 0, input: "xadf", groups: undefined]
// 匹配失败,返回null
s.match(regexp12); // null
// 正则表达式带有g修饰符,一次性返回所有匹配成功的结果
var regexp13 = /a/g;
var s = "abcabc";
s.match(regexp13); // ["a", "a"]
注:の文字列オブジェクトのインスタンスmatch
を含む正規、正規表現文字列照合方法g
改質剤を、結果が異なります。
var regexp13 = /a/g;
var regexp14 = /a/;
var s = "abcabc";
// 含g修饰符
s.match(regexp13); // ["a", "a"]
// 不含g修饰符
s.match(regexp14); // ["a", index: 0, input: "abcabc", groups: undefined]
上記のコード、/a/g
を含むg
すべての一致、フリー含有改質剤、返される配列index
とinput
属性と/a/
が含まれていないg
改質剤を、返される配列は、最初の一致を含み、含有index
およびinput
特性。
3.2 String.prototype.search()
文字列オブジェクトのsearch
メソッドは、マッチング結果を満たす全体の文字列の最初の状態の位置を返します。一致するものが返されない場合-1
。
"abc".search(/a/); // 0
"abc".search(/q/); // -1
3.2 String.prototype.replace()
Stringオブジェクトのreplace
メソッドは、値の一致を置き換えることができます。なお、第2の内容を交換することで、最初は正規表現で、二つの引数を取ります。
あなたが正規表現の追加した場合はg
修飾子を、そうでない場合は、それだけで価値の最初の出現を置き換えます、値の成功に一致するすべて置き換えられます。
// 普通调用
"abc".replace("a", "hello"); // "hellobc"
// 正则表达式调用
"abc".replace(/a/, "s"); // "sbc"
// 带g修饰符的正则表达式
"abcabcaaa".replace(/a/g, "s"); // "sbcsbcsss"
replace
第二のパラメータの方法は、ドル記号であってもよい$
、置換を生成するためのコンテンツを指します。
$&
:一致するサブストリング$`
:検索結果の前に文字列$'
:文字列のマッチング結果バック$n
:最初に一致しn
、コンテンツのセットをn
から1
スタート$$
:ドル記号を指します$
"abcadaeafg".replace(/b/, "$&+$1-$`"); // "ab+$1-acadaeafg"
replace
第二のパラメータの方法は、各マッチング関数の戻り値を置換するコンテンツの機能であってもよいです。
'3afaadf;5'.replace(/[0-9]+/g, function (number) {
return 100*number;
}); // "300afaadf;500"
3.3 String.prototype.split()
文字列オブジェクトのsplit
A法正規表現文字列を分割するためによれば、文字列内の個々の分割部分の配列を返します。
// 普通调用
'a, b,c, d'.split(',')
// [ 'a', ' b', 'c', ' d' ]
// 正则分隔,去除多余的空格
'a, b,c, d'.split(/, */)
// [ 'a', 'b', 'c', 'd' ]
4.正規表現の修飾子
フロント私はそれが最終的に修飾子が何を使用し、正規表現修飾子ことを言っていますか?
修飾子は、正規表現の追加ルールを単独で使用することができる原因、それはまた、一緒に使用することができます。
4.1グラム修飾子
g
修飾子は、グローバルマッチング、すべて満たすに条件に一致する正規表現になります。
4.2 I修飾子
i
モディファイ原因は、デフォルトではケースを無視し、正規表現は、大文字と小文字が区別対象となっています。
モディファイ4.3メートル
m
修飾子は、マルチラインモードの原因となります。デフォルトでは、^
と$
一致した文字列の始めと終わりとm
その後の改質剤、^
及び$
、ラインの最初の行と終了と一致、即ち、^
及び$
改行認識する(\n
)。
5.参考リンク
このブログは、自分の研究ノートで、オリジナルを参照してくださいW3Cの公式サイトのチュートリアル。
質問があれば、時間に明記してください!
ようこそ通信、Eメール:[email protected]