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つまたは複数
よく使われる正規表現
var re = /ab+c/;
var re = new RegExp("ab+c");
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')
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
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/
Reference
この問題について(No.66-正規表現), 我々は、より多くの情報をここで見つけました https://velog.io/@playck/정규표현식テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol