正規表現のマスタリング
22762 ワード
これは、一連の記事の第2の部分です.最初の記事ではJavaScriptの文字列を見て、どのように文字列を操作して動作するかを見ました.索引とスライスの方法、文字列の長さのプロパティ、および文字列の長さのプロパティの扱い方を見ました.
この記事では、正規表現を見ていきます.
正規表現
正規表現は文字に対して文字列を検索するのに役立つパターンで、JavaScriptだけに限定されません.PHP、MySQL、C、C++ E . T . Cでそれらを見つけることができます.正規表現は非常に有用であり、朝のベッドでの食事として、文字列と一緒に仕事をする.正規表現の1行で置き換えることができる条件文はどのように驚くでしょう.正規表現は、データの検証にも便利です.ユーザーがプログラムが必要とする正しいデータを入力するように信頼できません.したがって、ユーザーが入力したデータが必須のパターンに準拠するように正規表現を使用することができます.正規表現の構文を見てみましょう.
表記
可能な回数の文字が表示されます
?
0または1回
+
1回以上の時間
*
0回以上
{ n }
n nが整数である回数
{ N , M }
nとmが整数であるnからmまでの回数
我々は現在、我々のバリデータを作成するための十分な知識を持って武装している、パスワード検証器を試してみましょう、私たちのパスワードバリデータは大文字、小文字と数字の存在をチェックします.
また、分割文字列にregexpを使用することもできます.文字列メソッドの検索と一致はregexpをパラメータとして受け取ります.まず、正規表現としてregexpを使って文字列を分割する方法を見てみましょう
この記事では、正規表現を見ていきます.
正規表現
正規表現は文字に対して文字列を検索するのに役立つパターンで、JavaScriptだけに限定されません.PHP、MySQL、C、C++ E . T . Cでそれらを見つけることができます.正規表現は非常に有用であり、朝のベッドでの食事として、文字列と一緒に仕事をする.正規表現の1行で置き換えることができる条件文はどのように驚くでしょう.正規表現は、データの検証にも便利です.ユーザーがプログラムが必要とする正しいデータを入力するように信頼できません.したがって、ユーザーが入力したデータが必須のパターンに準拠するように正規表現を使用することができます.正規表現の構文を見てみましょう.
let myRegExp = /a/ //creates a regular expression that will search of match a in a string, or
let myRegExp = new RegExp('a') //This is also fine to work with too
Regexpコンストラクターを使用して正規表現を作成したり、コンストラクタを使用して作成することもできます.マッチするパターンを検索するか、2つの前方のスラッシュの内側に含める必要があります.このようにして、上記のように変数に代入したり、正規表現のコンストラクターを呼び出したり、ダブルクォートの内側にマッチするパターンを含む2つのフォワードスラッシュを渡したりできます.典型的なユースケースを見てみましょう.文字列で文字Aを検索したいと思います.let myString = 'bat',
let myRegExp = /a/
console.log(myRegExp.test(myString))
//logs out true
「bat」が含まれているので、真のログアウトします.テスト関数に供給された文字列は、テストメソッドを使用する正規表現パターンに一致します.また、1つ以上のパターンの文字列をテストすることもできます.let searchPattern = /[aeiou]/ //the patterns we want to
//test, remember we are testing for a, e, i, o, u.
let myString = 'bet'
console.log(searchPattern.test(myString))
//logs out true
myString ='bar'
console.log(searchPattern.test(myString))
//logs out true
myString = 'but'
console.log(searchPattern.test(myString))
//logs out true
検索パターンが四角括弧の中に囲まれた文字のどれかの文字列をテストするべきであると言うので、私たちが私たちのmyString変数に割り当てるすべての値のためにtrueを返します.このパターンは常に文字列内のパターンの位置にかかわらずtrueを返すことに注意してください.しかし、パターンにマッチする文字がどこにあるかをより詳細に制御することができます.マッチする文字が文字列の先頭または末尾にあるかどうかをテストできます.文字列の開始時にテストを行うには、これを行うことができます.let searchPattern = /^a/
let myString = 'bat'
console.log(seacrhPattern.test(myString))
//logs false because a is not at the starting
//of the string
myString = 'act'
console.log(searchPattern.test(myString))
//logs true
我々は(^)を正規表現で使用します、我々が我々が捜しているパターンがストリングの始めに現れるのを望むとき、そして、我々が供給したストリングが最初でないなら、我々はfalseを得ます.文字列の最後に文字をテストしたいなら、これを行うことができます.let searchPattern = /r$/
let myString = 'Brat'
console.log(searchPattern.test(myString))
//logs out false because r is not at the end of the string
myString = 'bar'
console.log(searchPattern.test(myString))
//logs out true coz r is at the end of the string
我々は、2つの組み合わせを組み合わせることができます我々は、単一の単語をテストしていることを確認します.let searchPattern = /^tar$/
let myString = 'Star'
console.log(searchPattern.test(myString))
//logs out false because star begins with s
myString = 'tar'
console.log(searchPattern.test(myString))
//logs out true because the string contains only the words tar
また、パイプ演算子を使用して、複数のパターンを許可し、文字列のいずれかのパターンが一致する場合にtrueを返します.以前の例では、括弧とパイプ演算子を使用して、文字列内の複数のパターンを結合しますlet searchPattern = /(^a|e|i|o|u)/
let myString = 'card'
console.log(searchPattern.test(myString))
//logs out false because we excluded a from the pattern and thus card doesnt fit
myString = 'cool'
console.log(searchPattern.test(myString))
//logs put true because o is among the list of pattern we want to match
我々は、我々のパターンがより柔軟であるのを許す余分な修飾子を加えることができます、我々がケースに関係なくパターンを捜していると言ってください、さもなければ、我々は1つ以上の試合を返すか、マルチライン検索を実行したいですデフォルトの正規表現では、単一の文字列に対してのみパターンを検索します.私は、I、GとMだけを行うことを可能にする3つの修飾子があります.let searchPattern = /a/i //now this will match for a irrespective of the case
let myString = 'And'
console.log(searchPattern.test(myString))
//logs true because we are searching irrespective of the case.
グローバルに検索し、文字列のすべてのマッチを返します.let searchPattern = /cat/g //this will match the pattern cat in a string for each occurence of that pattern in the string.
let pattern = new RegExp('cat', 'g') //this is how we can do this using the RegExp constructor
マルチライン文字列を持っていて、その中のパターンを検索したいなら、これを行うことができます.let searchPattern = /cat/m //this will match the pattern cat in a multi line string
let patter = new RegExp('cat', 'm') // The constructor method
regexpのより実用的な使い方に飛び込みましょう.文字列をテストして小文字や大文字や単語だけを含んでいるかどうかをチェックすることができます.文字列が特殊文字を含んでいるかどうかテストすることもできます.文字列をチェックし、小文字のパターンと一致するかどうかを確認します.let searchPattern = /^[a-z]+$/ //this is the format for checking only lower case letters
let myString = 'Kalashin'
console.log(searchPattern.test(myString))
//logs out false becuase the string begins with an uppercase K
myString = 'kalashin'
console.log(searchPattern.test(myString))
//logs out true because we have no uppercase in the string
なぜ私たちがパターンにプラス記号を追加したのか疑問に思っているかもしれませんが、上記の例を調べると、文字列が小文字で始まり、小文字で終わる必要があると言っています.文字列内の小文字が1つ以上ある場合、+記号を追加します.そのことについてもう少しお話します.大文字と数にマッチしましょう.let searchPattern = /[A-Z]?[0-9]+/ //we are matching against uppercase alphabets and numbers
let myString = 'kalashin'
console.log(searchPattern.test(myString)) //logs out false
myString = 'KaLAshin098'
console.log(searchPattern.test(myString))
//logs out true
特定の文字列でマッチしようとしている文字数を制限するために、数量指定子を使用できます.これは、それらの多くを含むテーブルです表記
可能な回数の文字が表示されます
?
0または1回
+
1回以上の時間
*
0回以上
{ n }
n nが整数である回数
{ N , M }
nとmが整数であるnからmまでの回数
我々は現在、我々のバリデータを作成するための十分な知識を持って武装している、パスワード検証器を試してみましょう、私たちのパスワードバリデータは大文字、小文字と数字の存在をチェックします.
let isPassword = (val) => {
if(val.length < 8){
throw Error('Passowrd should be at least 8 characters long')
}
let pattern = /[a-z]?[A-Z]+[a-z]+[0-9]+/
return pattern.test(val)
}
console.log(isPassword('Kinder092'))
//logs out true
console.log(isPassword('lanertes'))
//logs out false
値と一致するために使用しているパターンは、小文字が1回以上複数回表示されなければならないということを指定します.パターンにマッチしない文字列を指定した場合は、小文字、大文字、数字を含まないので、falseを取得します.その上に構築し、メールをチェックするバリデータを作成しましょう.let isEmail = (val) => {
let pattern = /^[\w]+(\.[\w]+)*@([\w]+\.)+[a-z]{2,7}$/
return pattern.test(val)
}
let email = '[email protected]'
console.log(isEmail(email))
//logs out true
email = '[email protected]'
console.log(isEmail(email))
//logs out true
我々のパターンを調べましょう、我々は1つ以上の手紙の存在のためにストリングをチェックします、次に、我々は期間の存在をチェックします、しかし、regexp期間がワイルドカード検索(どんなキャラクタ)でも表すのに用いられるので、我々はそれをエスケープしなければなりません.アスタリスクは、@記号の前に1つ以上の期間を持っている電子メールのためにそこにあります(Kit . kickass . killerkicks)、@キャラクターはすぐに1つ以上の手紙によってあとに続きます.これは、我々のテストが広範囲にわたるメールを収めることができることを確実とします.また、分割文字列にregexpを使用することもできます.文字列メソッドの検索と一致はregexpをパラメータとして受け取ります.まず、正規表現としてregexpを使って文字列を分割する方法を見てみましょう
let myString = 'kala, samson, John.vodka'
let splitString = myString.split([,\.])
console.log(splitString)
//logs out [ 'kala', ' samson', ' John', 'vodka' ]
検索メソッドは、検索パターンとして渡されるパターンにマッチする最初の部分文字列のインデックスを返しますので、2つ以上の単語がパターンに一致する場合、左から最初のマッチのインデックスだけが返されます.let myString = 'kala, samson, John.vodka'
console.log(myString.search(/samson/i))
//logs out 6 because the substring samson starts from the 6th position
console.log(myString.search(/kala/i))
//logs out 0 because the substring kala begins at index 0
マッチする関数はまた、文字列のインデックスを返す代わりに正規表現を受け入れます.これには、含まれる配列を返します.let heroes = 'deadpool, thor, hulk, ironman, antman, spiderman'
let splitString = heroes.match(/iron/i)
console.log(splitString)
//[
// 'iron',
// index: 22,
// input: 'deadpool, thor, hulk, ironman, antman, spiderman',
// groups: undefined
//]
正規表現には、マッチメソッドの戻り値と同様の配列を返すexecメソッドもあります.それはすべての私たちの正規表現と文字列の記事のために今は、私は除外した任意のメソッドがある場合は、コメントのセクションでそれらを追加する自由を感じる、すぐに再度参照してください.Reference
この問題について(正規表現のマスタリング), 我々は、より多くの情報をここで見つけました https://dev.to/kalashin1/mastering-regular-expressions-2161テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol