[英]is it possible to use regex in js to replace several different chars?
我需要將字符串中的所有重音字符替換為未重音版本,以進行排序。 我找到了如何匹配重音符號,但是是否可以使用正則表達式替換每個重音符號? 我的意思是:
var re = /ùÙüÜäàáëèéïìíöòóüùúÄÀÁËÈÉÏÌÍÖÒÓÜÚñÑ/g;
var str = "ùÙüÜäàáëèéïìíöòóüùúÄÀÁËÈÉÏÌÍÖÒÓÜÚñÑ";
var newstr = str.replace(re, 'M');
console.log(newstr);
這會打印'M',但我需要:'uUuUaaaeeeiiiooouuuAAAEEEIIIOOOUUnN'
這可能嗎? 謝謝
您需要使用字符類。
var re = /[ùÙüÜäàáëèéïìíöòóüùúÄÀÁËÈÉÏÌÍÖÒÓÜÚñÑ]/g;
然后,您可以將函數作為第二個參數傳遞給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ÚñÑ
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 / sec
http://jsperf.com/deaccentuate
為了便於閱讀,這非常冗長。 (不管怎么說,每個人自己。)
var deaccentuate = (function() {
var conversion =
{ 'a' : /[äàá]/g
, 'e' : /[ëèé]/g
, 'i' : /[ïìí]/g
, 'o' : /[öòó]/g
, 'u' : /[üùú]/g
, 'n' : /ñ/g
, 'A' : /[ÄÀÁ]/g
, 'E' : /[ËÈÉ]/g
, 'I' : /[ÏÌÍ]/g
, 'O' : /[ÖÒÓ]/g
, 'U' : /[ÜÙÚ]/g
, 'N' : /Ñ/g
}
return function(str) {
return Object.keys(conversion).reduce(function(str, c) {
return str.replace(conversion[c], c)
}, str)
}
}())
用法:( http://jsbin.com/UFEbuho/1/ )
var input = "ùÙüÜäàáëèéïìíöòóüùúÄÀÁËÈÉÏÌÍÖÒÓÜÚñÑ"
console.log(deaccentuate(input))
這個想法是循環轉換表的鍵,並將與該鍵的模式匹配的任何內容替換為鍵本身。 當然,這不是最有效的方法,但是除非輸入字符串相當長,否則無關緊要。
與使用這種驚人的解決方案相比,我想不到一種更有效地從字符串中刪除所有變音符的簡便方法。
實際觀看:
var str = "ùÙüÜäàáëèéïìíöòóüùúÄÀÁËÈÉÏÌÍÖÒÓÜÚñÑ"; var str_norm = str.normalize('NFD').replace(/[\̀-\ͯ]/g, ''); console.log(str_norm);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.