More Related Content
Similar to JavaScript The Good Parts Chapter 7
Similar to JavaScript The Good Parts Chapter 7 (20)
JavaScript The Good Parts Chapter 7
- 6. 7.1 正規表現の例 ― 全体
/^(?:([A-Za-z]+):)?(¥/{0,3})([0-9.¥-A-Za-z]+)
(?::(¥d+))?(?:¥/([^?#]*))?(?:¥?([^#]*))?(?:#(.*))?$/
/…/が正規表現の全体
^は文字列のはじまり,$は文字列のおわり
余計なものが最初,あるいは最後に付いていないことを保証する
(…)はキャプチャグループ
マッチした文字列を配列に格納する.最初のindexは1
キャプチャグループ末尾の?は,そのキャプチャグループを省略可能という意味
- 7. 7.1 正規表現の例 ― http:
/^(?:([A-Za-z]+):)?(¥/{0,3})([0-9.¥-A-Za-z]+)
(?::(¥d+))?(?:¥/([^?#]*))?(?:¥?([^#]*))?(?:#(.*))?$/
[…]は文字クラス
:はコロン文字
(?:…)は非キャプチャグループ
マッチした文字列を配列に格納しない.
使わない文字列は,非キャプチャグループにするとパフォーマンス上よい
-は範囲を表わす.上の場合,AからZとaからzにマッチする
+は直前の文字クラスが1回以上出てくるときにマッチする
- 8. 7.1 正規表現の例 ― ///
/^(?:([A-Za-z]+):)?(¥/{0,3})([0-9.¥-A-Za-z]+)
(?::(¥d+))?(?:¥/([^?#]*))?(?:¥?([^#]*))?(?:#(.*))?$/
{0,3}は直前の文字が0回,1回,2回,3回連続するとマッチする
(…)はキャプチャグループ
¥/はスラッシュ文字
正規表現の終わりでないことを示すためエスケープする
- 9. 7.1 正規表現の例 ― www.ora.com
/^(?:([A-Za-z]+):)?(¥/{0,3})([0-9.¥-A-Za-z]+)
(?::(¥d+))?(?:¥/([^?#]*))?(?:¥?([^#]*))?(?:#(.*))?$/
(…)はキャプチャグループ
.はピリオド文字
¥-はハイフン文字
範囲を表わすハイフンでないことを示すためエスケープする
+は直前の文字クラスが1回以上出てくるときにマッチする
- 10. 7.1 正規表現の例 ― :80
/^(?:([A-Za-z]+):)?(¥/{0,3})([0-9.¥-A-Za-z]+)
(?::(¥d+))?(?:¥/([^?#]*))?(?:¥?([^#]*))?(?:#(.*))?$/
(?:…)は非キャプチャグループ
末尾に?があるので省略可能
2つ目の:はコロン文字
+は直前の文字クラスが1回以上出てくるときにマッチする
¥dは数字
- 11. 7.1 正規表現の例 ― /goodparts
/^(?:([A-Za-z]+):)?(¥/{0,3})([0-9.¥-A-Za-z]+)
(?::(¥d+))?(?:¥/([^?#]*))?(?:¥?([^#]*))?(?:#(.*))?$/
(?:…)は非キャプチャグループ
末尾に?があるので省略可能
¥/はスラッシュ文字
*は直前の文字クラスの0回または1回以上の繰り返しにマッチする
^?#は「?と#を除くすべての文字」
- 12. 7.1 正規表現の例 ― ?q
/^(?:([A-Za-z]+):)?(¥/{0,3})([0-9.¥-A-Za-z]+)
(?::(¥d+))?(?:¥/([^?#]*))?(?:¥?([^#]*))?(?:#(.*))?$/
(?:…)は非キャプチャグループ
末尾に?があるので省略可能
¥?は? 文字
*は直前の文字クラスの0回または1回以上の繰り返しにマッチする
^#は「#を除くすべての文字」
- 13. 7.1 正規表現の例 ― #fragment
/^(?:([A-Za-z]+):)?(¥/{0,3})([0-9.¥-A-Za-z]+)
(?::(¥d+))?(?:¥/([^?#]*))?(?:¥?([^#]*))?(?:#(.*))?$/
(?:…)は非キャプチャグループ
末尾に?があるので省略可能
#はシャープ文字
*は直前の文字クラスの0回または1回以上の繰り返しにマッチする
.は「改行文字以外のすべての文字」
- 14. 7.1 正規表現の例 ― 良い正規表現
正規表現の機能は,各処理系の間で互換性が低い
入れ子部分の実行速度が遅い処理系もある
複雑さを避けることは大事
• 短く,シンプルに
• 正しく動くと確信できる
• 必要なときに修正できる
- 21. 7.2 正規表現の構築
正規表現リテラルのフラグ
• g 複数回マッチする
• i 大文字と小文字を区別しない
• m ^と$が行末記号にマッチする ?
RegExpオブジェクトのプロパティ
• global(役割はフラグgに同じ)
• ignoreCase(フラグiに同じ)
• muitiline(フラグmに同じ)
• lastIndex 次回のexecメソッドのマッチの開始点.初期値は0
• source ソース文字列
複数行に渡るマッチ対象を扱える
(例: import文や設定ファイルなど)
- 25. 7.3.3 正規表現因子
• 文字
• カッコで囲まれたグループ
• 文字クラス
• エスケープシーケンス
数字とアルファベット以外は,直前に¥をつけることで,その文字自身とみなす
ピリオド,キャロット,ドル文字は,エスケープしない場合に次の意味を持つ
• . 改行文字以外の文字
• ^ lastIndexが0 のとき,テキストの先頭部分にマッチする
mフラグがセットされているときは,改行文字にもマッチする
• $ テキストの末尾部分にマッチする
mフラグがセットされているときは,改行文字にもマッチする
- 26. 7.3.4 エスケープ
• ¥f 改ページ
• ¥n 改行文字
• ¥r キャリッジリターン
• ¥t タブ文字
• ¥u ユニコード文字の16進数表現
• ¥b バックスペース
• ¥d 数字,¥D 数字以外
• ¥s 空白文字,¥S 空白文字以外
• ¥w [0-9A-Za-z_]と同じ
• ¥b 単語境界
多言語アプリケーションでは実用的で
ないので,用途に応じたものを自分で
定義する(¥wと¥bは良いパーツではない)
• ¥1 第1番目のキャプチャグループ
- 27. 7.3.5 正規表現グループ
• キャプチャグループ(...) マッチした文字列はキャプチャ(配列に格納)される
• 非キャプチャグループ(?:...) されない
• 肯定先読み(?=...) グループにマッチした後,走査位置を巻き戻す
• 否定先読み(?!...) グループのマッチに失敗した場合のみ走査を続行する
次の2つは「良いパーツ」ではない
→サンプルコード参照
- 28. 7.3.6 正規表現クラス
• [...] 文字のセットを表わす
• 簡潔に書ける
• (?:a|e|i|o|u)
• [aeiou]
• 文字の範囲を指定できる
• (?:!|"|#|¥$|%|&|'|¥(|¥)|¥*|¥+|,|-|¥.|¥/|:|;|<|=|>|@|¥[|¥¥|]|¥^|_|` |¥{|¥||¥}|~)
• [!-¥/:-@¥[-`{-~]
• 補集合を表現できる
• [^ ではじめる
便利な点