No.66-正規表現



正規表現


文字列内の特定の文字の組合せを一致させるモード.

正規表現の作成方法


1.一般文字("/"モード)


スクリプトのロード時にコンパイルします.
var re = /ab+c/;

2.RegExpオブジェクトのコンストラクション関数


ジェネレータは実行時にコンパイルされます.
正規表現のモードが変化したり、ユーザー入力などのモードをインポートする必要がある場合に使用します.
var re = new RegExp("ab+c");
正規表現のモードが変化したり、ユーザー入力などのモードをインポートする必要がある場合に使用します.

ひょうしき


モード機能gは、すべての文字を検索する(非書き込み一致の最初の文字のみを検索する)i大文字と小文字を区別しないm複数行文字列を検索する

一致モード


モード機能-zA-Z英字(-を範囲)ㄱ-よ-範囲ハングル文字(-を範囲)0-9数字(-を範囲).すべての文字列ではありませんd数字ではありませんD数字ではありませんw英語のアルファベット、数字、ベースコードではありませんW/wsspaceスペースではありませんスペースではありません特殊記号特殊記号特殊記号

検索モード


モード機能カッコ内の1文字[^文字]カッコ内の文字を除く^文字列特定文字列で開始文字列$特定文字列で終了()検索と分類グループ(?:モード)検索グループb単語の先頭/末尾b単語の先頭/末尾b

数量モード


モード機能?有、無、*有、無または多+少なくとも1つまたは複数

よく使われる正規表現

  • Eメール
  • const REGEX_EMAIL = /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/;
    
    REGEX_EMAIL.test('[email protected]')
  • 数字
  • const REGEX_NUMBER = /^\d+$/;
    
    REGEX_NUMBER.test('123')
    
  • 携帯番号
  • const REGEX_PHONE_NUMBER = /[0-9]{3}-[0-9]{4}-[0-9]{4}/
    
    REGEX_PHONE_NUMBER.test('010-7750-5428')
  • urlから特定文字列
  • を抽出する
    const regex =  /^.*((youtu.be\/)|(v\/)|(\/u\/\w\/)|(embed\/)|(watch\?))\??v?=?([^#\&\?]*).*/;
    
    const url = 'https://www.youtu.be/-ZClicWm0zM'
    url.match(regex)
    const result = url.match(regex)
    result[7] // '-ZClicWm0zM'
  • クエリー
  • const List = ["김종진", "박태웅", "김종엽", "손지훈", "황성연"]
    const text = ['종']
    
    const filterData = List.filter( user => {
      const regexp = new RegExp( text, 'ig')
      return user.match( regexp )
    })
    
    console.log(filterData) // ["김종진", "김종엽"]
  • のテキストからのみ数字
  • を抽出する.
    const onSearchNumInMsg = (msg) => {
      const regexp = /[^0-9]/g;
      const result = msg.replace(regexp, "")
      return result
    }
    
    
    const msg = '[Web발신] [SCI평가정보]본인인증번호는 957271입니다. 정확히 입력해주세요.'
    onSearchNumInMsg(msg) // 957271
  • HTMLをテキスト
  • に変換
    const htmlToString = (html) => {
       return html.replace(
        /<(\/)?([a-zA-Z]*)(\s[a-zA-Z]*=[^>]*)?(\s)*(\/)?>/gi,'').trim()
    }
    
    const html = `
        <section class="main">
            <p>
               정규표현식은 다양한 곳에서 사용할 수 있다. <span>물론 어렵지만</span>
            </p>
        </section>
    `
    
    htmlToString(html) // '정규표현식은 다양한 곳에서 사용할 수 있다. 물론 어렵지만'

    アルゴリズムを解く


    KACAアルゴリズム問題-新規IDの推奨
    const solution = s => {
      let recommended = s
        .toLowerCase() // 모든 대문자를 소문자로 치환
        .replace(/[^\w-_.]/g, '') // 알파벳 소문자, 숫자, '-', '_', '.' 제외한 모든 문자 제거
        .replace(/\.{2,}/g, '.') // 마침표(.) 2번 이상 연속된 부분 하나의 마침표로 치환
        .replace(/^\.|\.$/g, '') // 마침표(.)가 처음이나 끝에 위치한다면 제거
        .replace(/^$/g, 'a') // id가 빈 문자열이라면 "a" 대입
        .substring(0, 15) // id의 16번째 자리부터 다 제거
        .replace(/\.$/g, ''); // 마침표(.)가 끝에 위차하면 제거
    
      if (recommended.length <= 2) {
        const ch = recommended[recommended.length - 1];
        while (recommended.length <= 2) {
          recommended += ch;
        }
      }
      // id의 길이가 2자 이하라면, id의 마지막 문자를 id의 길이가 3이 될 때까지 반복해서 끝에 붙임
      
      return recommended;
    };
    
    console.log(solution('...!@BaT#*..y.abcdefghijklm'));
    このほか、特定の文字列置換、大文字と小文字の変換、文字位置の検索など、さまざまな方法を使用することができます.
    正規表現練習サイト
    https://regexr.com/