Javascript 多个特殊字符替换优化
我需要用javascript或jQuery替换字符串中的所有特殊字符。Javascript 多个特殊字符替换优化,javascript,jquery,string,special-characters,Javascript,Jquery,String,Special Characters,我需要用javascript或jQuery替换字符串中的所有特殊字符。 我相信有更好的方法可以做到这一点。 但我目前没有任何线索。 有人有主意吗 function Unaccent(str) { var norm = new Array('À','Á','Â','Ã','Ä','Å','Æ','Ç','È','É','Ê','Ë','Ì','Í','Î','Ï', 'Ð','Ñ','Ò','Ó','Ô','Õ','Ö','Ø','Ù','Ú','Û','Ü','Ý','Þ','ß', '
我相信有更好的方法可以做到这一点。
但我目前没有任何线索。
有人有主意吗
function Unaccent(str) {
var norm = new Array('À','Á','Â','Ã','Ä','Å','Æ','Ç','È','É','Ê','Ë','Ì','Í','Î','Ï', 'Ð','Ñ','Ò','Ó','Ô','Õ','Ö','Ø','Ù','Ú','Û','Ü','Ý','Þ','ß', 'à','á','â','ã','ä','å','æ','ç','è','é','ê','ë','ì','í','î','ï','ð','ñ', 'ò','ó','ô','õ','ö','ø','ù','ú','û','ü','ý','ý','þ','ÿ');
var spec = new Array('A','A','A','A','A','A','A','C','E','E','E','E','I','I','I','I', 'D','N','O','O','O','0','O','O','U','U','U','U','Y','b','s', 'a','a','a','a','a','a','a','c','e','e','e','e','i','i','i','i','d','n', 'o','o','o','o','o','o','u','u','u','u','y','y','b','y');
for (var i = 0; i < spec.length; i++) {
str = replaceAll(str, norm[i], spec[i]);
}
return str;
}
function replaceAll(str, search, repl) {
while (str.indexOf(search) != -1) {
str = str.replace(search, repl);
}
return str;
}
函数不相关(str){
目前新阵列的VAVAR范数为新阵列的新阵列的新阵列的新阵列的新阵列的新阵列的新阵列的新阵列的新阵列的新阵列的新阵列的新阵列的范范数数数数数数数(包括“19 192”、“”、“”、“”、“193”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“ò、ò、õ、ö、ù、ù、ú、ý、ý、ý、ÿ’;
新数组(‘A’、‘A’、‘A’、‘A’、‘A’、‘A’、‘A’、‘A’、‘A’、‘C’、‘E’、‘E’、‘E’、‘E’、‘E’、‘I’、‘I’、‘A’、‘A’、‘A’、‘A’、‘A’、‘A’、‘A’、‘A’、‘A’、‘A’、‘A’、‘C’、‘C’、‘C’、‘E’、‘E’、‘E’、‘E’、‘E’、‘E’、‘E’、‘E’、‘E’、‘E’、‘E’、‘E’、‘E’、‘E’、‘E’、‘E’、‘E’、‘E’、‘E’、‘E’、‘E’、‘E’、‘E’、‘E’、‘E’、‘E’、‘E’、、‘E’、、D’、‘N’、‘O’、‘O’、‘O’、‘O’、‘O’、‘U’、‘U’、‘U’、‘U’、‘Y’、‘Y’、‘b’、‘Y’;
对于(变量i=0;i
以下是一个使用查找映射的版本,它的工作效率比嵌套循环稍高:
function Unaccent(str) {
var map = Unaccent.map; // shortcut
var result = "", srcChar, replaceChar;
for (var i = 0, len = str.length; i < len; i++) {
srcChar = str.charAt(i);
// use hasOwnProperty so we never conflict with any
// methods/properties added to the Object prototype
if (map.hasOwnProperty(srcChar)) {
replaceChar = map[srcChar]
} else {
replaceChar = srcChar;
}
result += replaceChar;
}
return(result);
}
// assign this here so it is only created once
Unaccent.map = {'À':'A','Á':'A','Â':'A'}; // you fill in the rest of the map
函数不相关(str){
var map=uncent.map;//快捷方式
var result=“”,srcChar,replaceChar;
对于(变量i=0,len=str.length;i
工作演示:
仅供参考,谷歌搜索“重音折叠”会返回许多其他实现(许多类似,但也有一些使用regex)
这里有一个性能稍高的版本(快2.5倍),可以直接索引重音字符,而不必进行对象查找:
function Unaccent(str) {
var result = "", code, lookup, replaceChar;
for (var i = 0, len = str.length; i < len; i++) {
replaceChar = str.charAt(i);
code = str.charCodeAt(i);
// see if code is in our map
if (code >= 192 && code <= 255) {
lookup = Unaccent.map.charAt(code - 192);
if (lookup !== ' ') {
replaceChar = lookup;
}
}
result += replaceChar;
}
return(result);
}
// covers chars from 192-255
// blank means no mapping for that char
Unaccent.map = "AAAAAAACEEEEIIIIDNOOOOO OUUUUY aaaaaaaceeeeiiiionooooo uuuuy y";
函数不相关(str){
var result=“”、代码、查找、替换字符;
对于(变量i=0,len=str.length;i 如果(code>=192&&code,这里有一个使用查找映射的版本,它比嵌套循环更有效:
function Unaccent(str) {
var map = Unaccent.map; // shortcut
var result = "", srcChar, replaceChar;
for (var i = 0, len = str.length; i < len; i++) {
srcChar = str.charAt(i);
// use hasOwnProperty so we never conflict with any
// methods/properties added to the Object prototype
if (map.hasOwnProperty(srcChar)) {
replaceChar = map[srcChar]
} else {
replaceChar = srcChar;
}
result += replaceChar;
}
return(result);
}
// assign this here so it is only created once
Unaccent.map = {'À':'A','Á':'A','Â':'A'}; // you fill in the rest of the map
函数不相关(str){
var map=uncent.map;//快捷方式
var result=“”,srcChar,replaceChar;
对于(变量i=0,len=str.length;i
工作演示:
仅供参考,谷歌搜索“重音折叠”会返回许多其他实现(许多类似,但也有一些使用regex)
这里有一个性能稍高的版本(快2.5倍),可以直接索引重音字符,而不必进行对象查找:
function Unaccent(str) {
var result = "", code, lookup, replaceChar;
for (var i = 0, len = str.length; i < len; i++) {
replaceChar = str.charAt(i);
code = str.charCodeAt(i);
// see if code is in our map
if (code >= 192 && code <= 255) {
lookup = Unaccent.map.charAt(code - 192);
if (lookup !== ' ') {
replaceChar = lookup;
}
}
result += replaceChar;
}
return(result);
}
// covers chars from 192-255
// blank means no mapping for that char
Unaccent.map = "AAAAAAACEEEEIIIIDNOOOOO OUUUUY aaaaaaaceeeeiiiionooooo uuuuy y";
函数不相关(str){
var result=“”、代码、查找、替换字符;
对于(变量i=0,len=str.length;i 如果(code>=192&&code您可以准备数组的键值对类型,并通过jquery遍历该数组
例如:
function Unaccent(str) {
var replaceString = {'À':'A','Á':'A','Â':'A'}; // add more
$.each(replaceString, function(k, v) {
var regX = new RegExp(k, 'g');
str = str.replace(regX,v);
});
}
祝您好运!!您可以准备数组的键值对类型,并通过jquery遍历该数组
例如:
function Unaccent(str) {
var replaceString = {'À':'A','Á':'A','Â':'A'}; // add more
$.each(replaceString, function(k, v) {
var regX = new RegExp(k, 'g');
str = str.replace(regX,v);
});
}
祝你好运!!使用对象作为映射是个好主意,但是考虑到要替换的字符数,最好预先初始化对象,这样就不必在每次运行函数时都重新初始化它(假设你多次运行函数):
var uncent=(函数(){
var charMap={'À':'A','193':'A','A','A':'A','A':'A','A'/**等.*/};
返回函数(str){
变量i,修改=“当前”;
对于(i=0;i
这将提前将函数的繁重工作加载到页面加载时间(如果愿意,您可以进行一些修改,将其延迟到函数的第一次调用)。但这将占用实际函数调用的一些处理时间
有些浏览器可能会对这部分进行优化,因此您可能看不到任何好处。但在较旧的浏览器上(性能更受关注),您可能会看到预处理角色映射的一些好处。使用对象作为映射是一个好主意,但考虑到要替换的字符数,预初始化对象可能是一个好主意,这样就不必每次运行函数时都重新初始化它(假设您多次运行该函数):
var uncent=(函数(){
var charMap={'À':'A','193':'A','A','A':'A','A':'A','A'/**等.*/};
返回函数(str){
变量i,修改=“当前”;
对于(i=0;i
这将是前载