0

文字列、特定の文字、単語などの最初の出現に一致する正規表現の解決策をオンラインで見つけましたが、文字のセットの最初の出現に一致する(または私の場合は一致しない)解決策をまだ見つけていません文字のセット)。

たとえば、私は以下のような文字列を持っています(javascriptで):

var testString = '~!@#$%^&*()_+|}{POIUYTREWQ":?><asdfghjklm,./;[]\=-0987654321`~!@#$%^&*()_+|}{POIUYTREWQ":?><asdfghjklm,./;[]\=-0987654321`~!@#$%^&*()_+|}{POIUYTREWQ":?><asdfghjklm,./;[]\=-0987654321`'

ご覧のとおり、testString内には奇妙な文字が数多く出現しています。

以下のように、問題のあるキャラクターを表示するために正規表現の一致を設定しました。

var regTest = /[^A-Za-z0-9.,?()@\[\]\-\/ ]/g;
var wrongChar = testString.match(regTest);

さて、私の問題は、wrongCharが一致しない文字の配列をうまく返しても、以下のように、文字が出現するたびに返されることです。

~,!,#,$,%,^,&,*,_,+,|,},{,",:,>,<,;,\,=,`,~,!,#,$,%,^,&,*,_,+,|,},{,",:,>,<,;,\,=,`,~,!,#,$,%,^,&,*,_,+,|,},{,",:,>,<,;,\,=,`

すべての不要な文字の最初の出現のみをすばやく(正規表現の変更など)与える方法はありますか、または文字がすでに間違った文字内に保存されているかどうかをテストし続けるために2つの配列を作成する必要があります(長い方法)?

4

1 に答える 1

0

オカレンスを1つだけ取得するには、正規表現を非グローバルにします。

各文字を1回だけ取得するには、wrongChar結果の配列から重複を削除するだけです。

var singleChars = wrongChar.sort().reduce(function(res, x) {
    if (x != res[res.length-1])
         res.push(x);
    return res;
}, []);
于 2013-01-11T03:00:19.210 に答える