2018年6月20日水曜日

正規表現/Regular Expressions (JavaScript)

freeCodeCamp の Regular Expressions に関するレッスンのメモ。
Regular Expressions | freeCodeCamp

基本

  • regex もデータ型の一つ
  • .test() メソッド: regex.test(テストしたいString); の形でチェックできる

let testStr = "somethingToTest";
let testRegex = /Test/;
testRegex.test(testStr);
 // Returns true
  • .match() メソッド: string.match(regex); でマッチしたStringを取り出す

Flag

  • /freecodecamp/ii の部分をflagという
  • i は大文字小文字どちらもマッチするようにするflag (case insensitive flag)
  • g は何回でもマッチするようにするflag (global flag)
  • /freecodecamp/gi みたいに複数書ける

よく使いそうなもの

  • .: wildcard character 何にでもマッチする
  • [aiu]: a, i, u のどれにでもマッチする
  • [a-z]: a から z の範囲の文字にマッチする
  • [a-z0-9]: a-zと0-9の全て
  • [^aeiou]: a, e, i, o, u 以外の 文字にマッチする
    • ※けど、., !, [, @, / と white space にはマッチしない(何故?)
    • → そもそも[] が示すのが character set だからかな?そこに記号は含まれてない?
  • [^something] は、character set からsomethingを除外する
  • [] の外で ^ が使われたときは意味が変わる。
  • [] の外の ^ →Stringの最初でだけマッチする

shorthand character classes

  • \w: [A-Za-z0-9_] と同じ(全てのアルファベット大文字小文字、数字、とアンダーバー) (="alphanumeric characters" というのはこれっぽい?)
  • \W: 上の逆。 [^A-Za-z0-9_]
  • \d: [0-9]
  • \D: 上の逆。 [^0-9]
  • a+: aが1回以上続けて出てくる
  • a*: aが0回位以上続けて出てくる(下の例の /t[a-z]*?i/ で"ti"にマッチさせるときに効果を発揮する)
  • Regular expressions はデフォルトでは greedy match (一番長いものにマッチする)
  • ? でlazy match(一番短いものにマッチする)にできる

let text = "titanic";
text.match(/t[a-z]*i/); // ["titani"]
text.match(/t[a-z]*?i/); // ["ti"]

※上記の例はfreeCodeCampより

チェックツール

正規表現のチェックができるツール

Online regex tester and debugger: PHP, PCRE, Python, Golang and JavaScript

0 件のコメント:

コメントを投稿