単語のセットが与えられた場合、どの単語が文字のセットによってのみ形成されるかを知る必要があります。この文字が検証セットの一部であっても、この単語に許可されている文字数を超える文字を含めることはできません。
例:
Char set: a, a, ã, c, e, l, m, m, m, o, o, o, o, t (fixed set)
Words set: mom, ace, to, toooo, ten, all, aaa (variable set)
結果:
mom = true
ace = true
to = true
toooo = true
ten = false (n is not in the set)
all = false (there is only 1 L in the set)
aaa = false (theres is only 2 A in the set)
Javascriptでこの正規表現を生成する方法は?(大文字と小文字は区別されません)。
私はこのコードを試しましたが成功しませんでした:
var str = "ten"
var patt = new RegExp("^[a, a, ã, c, e, l, m, m, m, o, o, o, o, t]*");
console.log(patt.test(str));
このタスクは、正規表現を使用せずにコードを作成する方が適していると思いますが。しかし、私が考えることができる1つのアプローチは、うまくいくはずですが、ネガティブな先読みを使用することです。
例として文字セットを取り上げましょう。許可される単語には次の文字を含めることができ、リストにある量を超えないようにする必要があります。
a, a, ã, c, e, l, m, m, m, o, o, o, o, t
負の先読みを使用して、各文字に設定されている上記のように許可されているよりも多くの文字を含む文字列を破棄し、最後に1〜N文字の許可された文字セットを使用して単語をキャプチャする次の正規表現を記述できます。ここでNは総数です。文字の。
^(?!([^a]*a){3})(?!([^ã]*ã){2})(?!([^c]*c){2})(?!([^e]*e){2})(?!([^l]*l){2})(?!([^m]*m){4})(?!([^o]*o){5})(?!([^t]*t){2})[aãcelmot]{1,14}$
説明:
^
-文字列の開始(?!([^a]*a){3})
-この負の先読みは、セット内のa
総数a
が2つしかないため、文字列内の数が3以上の場合、入力を拒否します。(?!([^ã]*ã){2})
-同様に、この負の先読みはã
、設定された合計数がã
1つしかないため、文字列内の数が2以上の場合、入力を拒否します。[aãcelmot]{1,14}
-この文字セットは、許可された文字を少なくとも1つから最大14までキャプチャしますが、許可された文字の+
最大数のチェックはすでに負の先読みを使用して行われているため、単純に書き込むこともできます。$
-文字列の終わりJSコードデモ、
const arr = ['mom','ace','to','toooo','ten','all','aaa']
arr.forEach(x => console.log(x + " --> " +/^(?!([^a]*a){3})(?!([^ã]*ã){2})(?!([^c]*c){2})(?!([^e]*e){2})(?!([^l]*l){2})(?!([^m]*m){4})(?!([^o]*o){5})(?!([^t]*t){2})[aãcelmot]{1,14}$/.test(x)))
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加