【问题标题】:Search and replace multiple special characters with jquery用jquery搜索和替换多个特殊字符
【发布时间】:2011-05-12 22:33:51
【问题描述】:

目前这将从 textarea 中获取文本并替换 charMap 中指定的所有字符:

<form>
<textarea name="text" id="text" style="width:300px; height:200px;"></textarea><br />
<input type="button" name="submit" id="submit" value="submit" />
</form>

var charMap = {
    "Å":'x',
    "å":'y',
    "b":'z',
    "c":'f'
};

$('#submit').click(function() {

    var str = $('#text').val();
    var str_array = str.split('');

    for( var i = 0, len = str_array.length; i < len; i++ ) {
        str_array[ i ] = charMap[ str_array[ i ] ] || str_array[ i ];
    }

    foo = str_array.join('');
    $('#text').val(foo);

});

问题是它无法识别特殊字符。所以它将替换 'b' 和 'c' 而不是 'Å' 和 'å'。

有什么想法吗?

【问题讨论】:

  • 您是指这些特定的替换,还是将字母与字母表末尾的n 字符交换(其中n 是字母表中的当前字母位置)?
  • @Hamish - 我想要那些特定的替代品

标签: jquery regex replace


【解决方案1】:

现在我更好地理解了要求,您可以像这样创建一个字符映射到替换:

示例: http://jsfiddle.net/gaG28/2/

var charMap = {
    a:'z',b:'v',c:'n',d:'s',e:'d',
    f:'k',g:'e',h:'y',i:'j',j:'r',
    k:'f',l:'m',m:'a',n:'c',o:'q',
    p:'t',q:'g',r:'i',s:'b',t:'p',
    u:'l',v:'u',w:'h',x:'o',y:'w',z:'x'
};
var str = "abcdefghijklmnopqrstuvwxyz";

var str_array = str.split('');

for( var i = 0, len = str_array.length; i < len; i++ ) {
    str_array[ i ] = charMap[ str_array[ i ] ] || str_array[ i ];
}
str = str_array.join('');

这也会留下地图中找不到的任何字符。

【讨论】:

  • 太好了。我遇到的唯一问题是我想用'å'替换一些特殊字符,例如'å'。当我尝试使用这些字符时,返回什么都没有。
  • 非常感谢 patrick,但您的修改对我不起作用,请在原始问题中查看我的编辑。
  • @Dave - 它似乎对我有用。 Here's an updated example 与您在问题中引用的字符。如果Å:'&amp;Aring;' 不适合您,请尝试将密钥放在引号中,例如"Å":'&amp;Aring;'。将键放在引号中时,几乎可以接受任何字符作为键名。
  • 不错,双引号排序了
  • @patrick dw - 实际上这并没有更好。它在 jsfiddle 中完美运行,但在实际的 HTML 文件中无法运行。即使我将它们用双引号括起来,它也会拾取普通字符而不是特殊字符?
【解决方案2】:

由于.replace() 作用于一个字符串,并返回一个字符串,因此您可以将多个替换调用链接在一起:

var text = $(this).val().replace(/a/g, "z").replace(/b/g, "y").replace(/c/g, "x");

【讨论】:

  • 我也想过这样做,但我想只使用一个正则表达式来做到这一点
  • @DaveKingsnorth 嗯...好的。我正在尝试使用 JS 正则表达式是否可以做到这一点。
【解决方案3】:

您的原始代码是正确的,但是问题是由于页面的字符集引起的,请尝试以下操作:

  1. 确保您的页面保存为 UTF-8
  2. 在标题中包含以下内容

&lt;meta http-equiv="Content-Type" content="text/html; charset=utf-8" /&gt;

同样的问题让我头疼,这解决了我的问题。

【讨论】:

    猜你喜欢
    • 2011-04-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-10
    • 1970-01-01
    • 1970-01-01
    • 2011-01-04
    相关资源
    最近更新 更多