1

ソートのために、文字列内のアクセント付きのすべての文字をアクセントなしのバージョンに置き換える必要があります。アクセント付きのものを一致させる方法を見つけましたが、正規表現を使用してそれぞれを置き換えることは可能ですか? つまり:

var re = /ùÙüÜäàáëèéïìíöòóüùúÄÀÁËÈÉÏÌÍÖÒÓÜÚñÑ/g;
var str = "ùÙüÜäàáëèéïìíöòóüùúÄÀÁËÈÉÏÌÍÖÒÓÜÚñÑ";
var newstr = str.replace(re, 'M');
console.log(newstr);

これは「M」を出力しますが、「uUuUaaeeeiiiooouuuAAAEEEIIIOOOUUnN」が必要です

これは可能ですか?ありがとう

4

4 に答える 4

3

文字クラスを使用する必要があります。

var re = /[ùÙüÜäàáëèéïìíöòóüùúÄÀÁËÈÉÏÌÍÖÒÓÜÚñÑ]/g;

次に、関数を 2 番目の引数として関数に渡すことができreplaceます。この関数には、変換ロジックが含まれます。簡単な方法は、変換マップを使用することです。

例えば

var re = /[ùÙüÜäàáëèéïìíöòóüùúÄÀÁËÈÉÏÌÍÖÒÓÜÚñÑ]/g;

//incomplete but you get the idea
var conversionMap = {
    'ù': 'u',
    'Ù': 'U',
    'ü': 'u',
    'Ü': 'U',
    'ä': 'a'
};

"ùÙüÜäàáëèéïìíöòóüùúÄÀÁËÈÉÏÌÍÖÒÓÜÚñÑ".replace(re, function (c) {
    return conversionMap[c] || c;
}); //uUuUaàáëèéïìíöòóuuúÄÀÁËÈÉÏÌÍÖÒÓUÚñÑ

フィドル

于 2013-10-08T00:27:31.037 に答える
1

http://jsfiddle.net/Victornpb/YPtaN/4

var deaccentuate = (function(){

    var accent = "ùÙüÜäàáëèéïìíöòóüùúÄÀÁËÈÉÏÌÍÖÒÓÜÚñÑ",
        latin  = "uUuUaaaeeeiiiooouuuAAAEEEIIIOOOUUnN".split("");

    var re = new RegExp("["+accent+"]", "g");

    return function(str){
        return str.replace(re, function(c){
            return latin[accent.indexOf(c)]; }
        );
    } 
})();

deaccentuate("Olá, como estás?"); //Ola, como estas?

基準

2KB のテキストでベンチマーク テストを実行したところ、関数は他の回答よりも高速で、59000 Ops/秒に達しました。

http://jsperf.com/deaccentuate

ここに画像の説明を入力

于 2013-10-08T00:42:45.263 に答える