これをコンテキストに入れるために、次の2つの関数を検討してください。
ml_RestrictToChars = function(input,regex) {
var result = '';var c = '';
var rx = new RegExp(regex);
for (var i = 0; i < input.length; i++) {
c = input.charAt(i);
if (rx.test(c)) {
result += c;
}
}
return result;
};
ml_OmitChars = function(input,regex) {
var rx = new RegExp(regex,'g');
return input.replace(rx,'');
};
最初の関数は入力を特定の文字セットに制限し、2番目の関数は入力から任意の文字または文字のシーケンスを省略します。最初の関数のコードからわかるように、インクルージョンコードは一度に1文字しかチェックしないため、単一の文字クラスが'regex'引数に渡された場合にのみ機能します。
入力文字列について考えてみましょう。12-34
今、の正規表現を'[0-9]'
最初の関数と'[^0-9]'
2番目の関数に渡すと、期待どおりに同じ出力が得られます。1234
ただし、2番目の関数でより高度な式を使用すると、の'[^0-9][^0-9]-'
出力が得られます12-
。ただし、最初の関数に複数の文字クラスを渡すと、空の文字列が返されます。
私が疑問に思っているのは、ml_OmitCharsの逆を実行して、同じように機能する簡単な方法(できればループなし)があるかどうかです。