2016-11-21 36 views
-2

nam1|val1nam1|val1,name2|val2nam1|およびnam1|val1,のような文字列パターンがあります。 ^\w+\|\w+(,\w+\|\w+)*$特定の文字列パターンに一致する正規表現

第1の部分は、^\w+\|\w+は必ず文字列を作ることになります。私は

入力と出力が非常にシンプル

"nam1|val1" -> true 
"nam1|val1,name2|val2" -> true 
"nam1|" -> false 
"nam1|val1," -> false 
"nam1|val1,name" -> false 
"nam1|val1,name|" -> false 

答えて

2

だろう与えられたパターンが真か偽見つけるために正規表現を持っている必要があります少なくとも1から始まります。name|valueのペア。

次に、2番目の部分、(,\w+\|\w+)*は、最初のペアと後続のすべてのペアの間にカンマがある限り、同じパターンが無限に繰り返されることを示しています。 (が、アスタリスクは、パターンの第2の部分は全く発生しないことを定量化する。

最後$文字列がこのパターンに一致終了しなければならないと言います。 (。。すなわち、このパターンだけでなく、文字列の一部を一致させることができそれが原因^$の文字列全体と一致する必要があります)

をjavascriptのため、このパターンをフォーマットするには、単に前方を投げるので、両端にスラッシュ:/^\w+\|\w+(,\w+\|\w+)*$/パターンにはフラグは必要ありません。

\wの文字範囲外のより複雑な名前/値を照合する必要がある場合は、\wをすべて[Some Character Set(s)]に置き換える必要があります。

2

あなたがチェックする複数のペアを持っている場合は、あなたがevery機能付き分割さ文字列要素で、あなたの正規表現を適用することができます。

isValidPairs = function(str) { 
 
    return str.split(',').every(function(elt) { 
 
    return /^\w+\|\w+$/.test(elt); 
 
    }); 
 
} 
 

 
pairsArr = ["nam1|val1", "nam1|val1,name2|val2", "nam1|", "nam1|val1,", "nam1|val1,name", "nam1|val1,name|"]; 
 
pairsArr.forEach(function(str) { 
 
    console.log('%s: %s:', str, isValidPairs(str)); 
 
});

関連する問題