【问题标题】:string.search() that ignores accented characters?string.search() 忽略重音字符?
【发布时间】:2012-06-22 08:17:15
【问题描述】:

我需要将重音字符视为与非重音字符相同。这是我的代码:

var re = new RegExp(string, 'i');
if(target.search(re) == 0) { }

它目前忽略了字符的大小写,如果字符是否有重音,我如何也忽略?

【问题讨论】:

  • 尝试先从字符串中删除重音符号,然后传递正则表达式。 stackoverflow.com/questions/990904/…。无论如何,这应该有效。这个问题或类似的问题已经被问过很多次了。

标签: javascript regex


【解决方案1】:

使用库 semplice

http://semplicewebsites.com/removing-accents-javascript

var latin_map = {
  'Á': 'A', // LATIN CAPITAL LETTER A WITH ACUTE
  'Ă': 'A', // LATIN CAPITAL LETTER A WITH BREVE
...
  'ᵥ': 'v', // LATIN SUBSCRIPT SMALL LETTER V
  'ₓ': 'x', // LATIN SUBSCRIPT SMALL LETTER X
};


String.prototype.latinise = function() {
   return this.replace(/[^A-Za-z0-9]/g, function(x) { return latin_map[x] || x; })
};

【讨论】:

    【解决方案2】:

    我认为您必须先删除重音符号,然后再执行 RegExp。
    你可以使用我找到的这个函数here

    function stripVowelAccent(str)
    {
     var rExps=[
     {re:/[\xC0-\xC6]/g, ch:'A'},
     {re:/[\xE0-\xE6]/g, ch:'a'},
     {re:/[\xC8-\xCB]/g, ch:'E'},
     {re:/[\xE8-\xEB]/g, ch:'e'},
     {re:/[\xCC-\xCF]/g, ch:'I'},
     {re:/[\xEC-\xEF]/g, ch:'i'},
     {re:/[\xD2-\xD6]/g, ch:'O'},
     {re:/[\xF2-\xF6]/g, ch:'o'},
     {re:/[\xD9-\xDC]/g, ch:'U'},
     {re:/[\xF9-\xFC]/g, ch:'u'},
     {re:/[\xD1]/g, ch:'N'},
     {re:/[\xF1]/g, ch:'n'} ];
    
     for(var i=0, len=rExps.length; i<len; i++)
      str=str.replace(rExps[i].re, rExps[i].ch);
    
     return str;
    }
    

    【讨论】:

    • 这是一个薄弱的解决方案,它会出现许多您可能没想到的重音字符。请参阅remove accents in strings 了解如何正确处理重音。
    猜你喜欢
    • 2021-07-22
    • 1970-01-01
    • 1970-01-01
    • 2014-01-20
    • 1970-01-01
    • 1970-01-01
    • 2016-05-05
    • 1970-01-01
    • 2010-09-26
    相关资源
    最近更新 更多