Javascript 用js中数组中的其他字符替换特殊字符

Javascript 用js中数组中的其他字符替换特殊字符,javascript,replace,Javascript,Replace,我希望通过将字符串中的每个字符与数组中的一个字符进行比较,并用匹配的字符替换它,从而消除字符串中的特殊字符。下面的函数不会抛出任何错误,但会保持返回字符串不变 var name = "przykład"; // the characters i'm looking for in a string: var charList = ["Ą","ą","Ć","ć","Ę","ę","Ł","ł","Ó","ó","Ś","ś","Ź","ź","Ż","ź"];

我希望通过将字符串中的每个字符与数组中的一个字符进行比较,并用匹配的字符替换它,从而消除字符串中的特殊字符。下面的函数不会抛出任何错误,但会保持返回字符串不变

    var name = "przykład";      

    // the characters i'm looking for in a string:
    var charList = ["Ą","ą","Ć","ć","Ę","ę","Ł","ł","Ó","ó","Ś","ś","Ź","ź","Ż","ź"];

    // the characters i'd like to replace them with:
    var replaceList = ["A","a","C","c","E","e","L","l","O","o","S","s","Z","z","Z","z"];

    var limit = name.length;
    for (i = 0; i < limit; i++){
        for(var j in charList){
            name.charAt(i) === charList[j] ? name.replace(name.charAt(i), replaceList[j]) : "";
        }
    }

    return name;

我知道这个问题很可能会因为过于本地化而被解决,这很可能是我犯的一个愚蠢而容易的错误,但我仍然非常感谢对此提供的任何帮助。通常,在大多数编程语言中,replace函数的结果都会作为一个新的字符串对象返回。您应该将代码更改为:

if (name.charAt(i) === charList[j])
    name = name.replace(name.charAt(i), replaceList[j]);

此外,由于replace函数将替换该字符的所有匹配项,因此您可以稍微更改算法。

通常,在大多数编程语言中,replace函数的结果将作为新字符串对象返回。您应该将代码更改为:

if (name.charAt(i) === charList[j])
    name = name.replace(name.charAt(i), replaceList[j]);

此外,由于replace函数将替换该字符的所有匹配项,因此您可以稍微更改算法。

您可以将映射放入对象中,这样做的优点是易于维护,因为该字符及其替换项在对象中相邻,而不是试图在数组中对齐位置

e、 g

也许可以用字符代码做一些更聪明的事情,但我现在想不起来

编辑2017
修复了最后一个字符映射,谢谢@MarekSkiba.:-

您可以将映射放入对象中,这样做的优点是更易于维护,因为角色及其替换对象在对象中是相邻的,而不是试图在数组中对齐位置

e、 g

也许可以用字符代码做一些更聪明的事情,但我现在想不起来

编辑2017 修复了最后一个字符映射,谢谢@MarekSkiba.:-

这是我的解决方案

var cleanName = function(str) {
    if ($.trim(str) == '') return str; // jQuery
    str = $.trim(str).toLowerCase();
    var special = ['&', 'O', 'Z', '-', 'o', 'z', 'Y', 'À', 'Á', 'Â', 'Ã', 'Ä', 'Å', 'Æ', 'Ç', 'È', 'É', 'Ê', 'Ë', 'Ì', 'Í', 'Î', 'Ï', 'Ð', 'Ñ', 'Ò', 'Ó', 'Ô', 'Õ', 'Ö', 'Ù', 'Ú', 'Û', 'Ü', 'Ý', 'à', 'á', 'â', 'ã', 'ä', 'å', 'æ', 'ç', 'è', 'é', 'ê', 'ë', 'ì', 'í', 'î', 'ï', 'ð', 'ñ', 'ò', 'ó', 'ô', 'õ', 'ö', 'ù', 'ú', 'û', 'ü', 'ý', 'ÿ', '.', ' ', '+', '\''],
        normal = ['et', 'o', 'z', '-', 'o', 'z', 'y', 'a', 'a', 'a', 'a', 'a', 'a', 'ae', 'c', 'e', 'e', 'e', 'e', 'i', 'i', 'i', 'i', 'd', 'n', 'o', 'o', 'o', 'o', 'o', 'u', 'u', 'u', 'u', 'y', 'a', 'a', 'a', 'a', 'a', 'a', 'ae', 'c', 'e', 'e', 'e', 'e', 'i', 'i', 'i', 'i', 'o', 'n', 'o', 'o', 'o', 'o', 'o', 'u', 'u', 'u', 'u', 'y', 'y', '_', '_', '-', '-'];
    for (var i = 0; i < str.length; i++) {
        for (var j = 0; j < special.length; j++) {
            if (str[i] == special[j]) {
                str = str.replace(new RegExp(str[i], 'gi'), normal[j]);
            }
        }
    }
    str = str.replace(/[^a-z0-9_\-]/gi, '_');
    str = str.replace(/[\-]{2,}/gi, '_');
    str = str.replace(/[\_]{2,}/gi, '_');
    return str;
};

console.log(cleanName('l\'éléphant')); // "l-elephant"
这是我的解决方案

var cleanName = function(str) {
    if ($.trim(str) == '') return str; // jQuery
    str = $.trim(str).toLowerCase();
    var special = ['&', 'O', 'Z', '-', 'o', 'z', 'Y', 'À', 'Á', 'Â', 'Ã', 'Ä', 'Å', 'Æ', 'Ç', 'È', 'É', 'Ê', 'Ë', 'Ì', 'Í', 'Î', 'Ï', 'Ð', 'Ñ', 'Ò', 'Ó', 'Ô', 'Õ', 'Ö', 'Ù', 'Ú', 'Û', 'Ü', 'Ý', 'à', 'á', 'â', 'ã', 'ä', 'å', 'æ', 'ç', 'è', 'é', 'ê', 'ë', 'ì', 'í', 'î', 'ï', 'ð', 'ñ', 'ò', 'ó', 'ô', 'õ', 'ö', 'ù', 'ú', 'û', 'ü', 'ý', 'ÿ', '.', ' ', '+', '\''],
        normal = ['et', 'o', 'z', '-', 'o', 'z', 'y', 'a', 'a', 'a', 'a', 'a', 'a', 'ae', 'c', 'e', 'e', 'e', 'e', 'i', 'i', 'i', 'i', 'd', 'n', 'o', 'o', 'o', 'o', 'o', 'u', 'u', 'u', 'u', 'y', 'a', 'a', 'a', 'a', 'a', 'a', 'ae', 'c', 'e', 'e', 'e', 'e', 'i', 'i', 'i', 'i', 'o', 'n', 'o', 'o', 'o', 'o', 'o', 'u', 'u', 'u', 'u', 'y', 'y', '_', '_', '-', '-'];
    for (var i = 0; i < str.length; i++) {
        for (var j = 0; j < special.length; j++) {
            if (str[i] == special[j]) {
                str = str.replace(new RegExp(str[i], 'gi'), normal[j]);
            }
        }
    }
    str = str.replace(/[^a-z0-9_\-]/gi, '_');
    str = str.replace(/[\-]{2,}/gi, '_');
    str = str.replace(/[\_]{2,}/gi, '_');
    return str;
};

console.log(cleanName('l\'éléphant')); // "l-elephant"

javascript中的Replace返回一个字符串原语,而不是一个可以从您的答案推断出的对象。非常感谢,这就成功了-我知道这是一个愚蠢的错误mistake@RobG感谢您的澄清,尽管我的意思和我在大多数编程语言中明确说过的一样。我写object是因为在大多数语言中,类和类型都是作为对象实现的。javascript中的Replace返回一个字符串原语,而不是一个可以从您的答案推断出来的对象。非常感谢,这就成功了-我知道这是一个愚蠢的错误mistake@RobG谢谢你的澄清,尽管我在大多数编程语言中都明确表示了这一点。我写object是因为在大多数语言中,类和类型都是作为对象实现的。您在charList中复制了属性ź,最后一个属性应该是“ż”:“z”。您在charList中复制了属性ź,最后一个属性应该是“ż”:“z”。