Diacritics

JavaScript performance comparison

Revision 14 of this test case created by gabssnake

Preparation code


      
      <script>
Benchmark.prototype.setup = function() {
  var teste = "L'évêque et le forçat (livre premier et second) \n 1815. Alors que tous les aubergistes de la ville l'ont chassé, le bagnard Jean Valjean est hébergé par Mgr Myriel ( que les pauvres ont baptisé, d'après l'un de ses prénoms, Mgr Bienvenu). L'évêque de la ville de Digne, l'accueille avec bienveillance, le fait manger à sa table et lui offre un bon lit. \n Jean Valjean a été condamné en 1795, pour le vol d'un pain et vient de passer vingt ans au bagne. \n Pourtant malgré la générosité de son hôte, Jean Valjean s'enfuit en pleine nuit, après avoir dérobé les six couverts d'argent, les seules richesses de l'évêque. Le lendemain, les gendarmes le ramènent chez Mgr Bienvenu qui, à sa grande surprise, l'innocente. L'évêque lui offre même deux chandeliers en argent que Jean Valjean avait “oublié” d'emporter. Il souhaite ainsi aider l'ancien bagnard à redevenir un honnête homme. Pourtant sur la route, Jean Valjean commet un nouveau délit. Il vole un petit ramoneur. Mais, alors qu'il s'apprête à ranger son larcin dans sa besace, il revoit les chandeliers de Mgr Bienvenu, et se rappelle les paroles de l'évêque. Il n'aura plus alors qu'un seul but : honorer la bonté de l'ecclésiastique et servir le bien. \n La déchéance de Fantine \n Paris, Août 1817. \n Quatre étudiants, dont un certain Tholomyès, font un bon repas dans un cabaret avec quatre jeunes filles insouciantes, dont l'une, Fantine étonne par sa beauté et sa candeur. Elle vit avec Tholomyès sa première histoire d'amour. Les quatre jeunes hommes ont promis “une surprise”. Au dessert, ils s'esquivent pour … ne jamais revenir, annonçant dans la lettre d'explication qu'ils ont laissé, leur retour définitif dans leurs familles en province. Les jeunes filles s'amusent de cette farce, sauf Fantine, la plus jolie, qui est vraiment inquiète. Elle s'était offerte à Tholomyès et attend un enfant de lui. \n Cosette livrée “aux loups” \n Printemps 1818. \n Fantine quitte Paris et porte dans ses bras la petite fille qu'elle a eu de Tholomyès, et pour laquelle elle a tout sacrifié, Cosette. Elle souhaite retourner à Montreuil sur Mer, sa ville natale, où elle espère trouver du travail. En chemin, à Montfermeil, elle fait la connaissance d'un couple d'aubergistes, d'allure plutôt accommodante, les Thénardier. Très vite Cosette joue avec les petites filles des aubergistes. Fantine y voit là un signe du ciel et propose de leur confier quelque temps la garde de Cosette. Les aubergistes acceptent moyennant une pension. Cosette qui n'a que cinq ans se retrouve ainsi prise au piège d'un sinistre couple qui ne tarde pas à en faire sa servante. Tout le pays va désormais surnommer Cosette, “l'alouette”, petite esclave en haillons, fragile et tremblante, soumise à la tyrannie de ces abominables aubergistes. \n La déchéance \n Montreuil de 1818 à 1823 \n A son arrivée à Montreuil, Fantine découvre que sa ville natale est devenue prospère grâce à un inconnu, arrivé deux ans plus tôt et qui a su relancer et développer l'industrie de la région. Cet homme, M. Madeleine, (nom d'emprunt de Jean Valjean) semble un véritable bienfaiteur : il offre du travail à toutes les personnes honnêtes qui se présentent à sa fabrique, donne des conseils éclairés et multiplie les actes de générosité. Il est aussi doté d'une force peu commune. Un jour, il a sauvé un vieillard, Fauchelevent, que sa charrette menaçait d'écraser. M. Madeleine est parvenu à relever la carriole et à dégager le vieil homme, qui sans l'intervention de “cette force de la nature” était promis à une mort certaine. Au terme de sa réussite industrielle et de son ascension sociale, M. Madeleine accepte sous la pression de ses concitoyens de devenir le maire de la ville. \n Un homme, l'inspecteur Javert, ténébreux, obsédé par l'autorité, reste pourtant insensible à l'admiration unanime dont bénéficie M. Madeleine. Pire, ayant travaillé auparavant dans les bagnes du midi, il s'intéresse particulièrement à ce notable. Il a l'impression que ce visage ne lui est pas inconnu … \n Fantine a trouvé du travail dans les ateliers de M. Madeleine. Mais sa beauté suscite la jalousie de ses collègues qui commencent à l'épier. Elles découvrent que la jeune femme a un enfant naturel, ce qui lui vaut d'être renvoyée par la surveillante. Elle éprouve alors du mépris pour . Madeleine, qu'elle imagine responsable de ce renvoi. \n Pour parvenir à payer la pension de Cosette, Fantine est obligée de vendre ses cheveux blonds et aussi ses dents. \n Ultime étape de sa déchéance, la prostitution. Un jour d'hiver, Fantine, malade, fait les cent pas sur le trottoir. Un jeune bourgeois, pour se distraire, lui glisse une boule de neige dans le dos. Vexée, Fantine se jette sur l'individu et le frappe. L'inspecteur Javert intervient, arrête la prostituée et lui inflige six mois de prison. M. Madeleine, ému par les malheurs de la jeune fille intervient pour la faire libérer. Lorsqu'il apprend qu'il est indirectement la cause de la déchéance de cette jeune fille, Fantine ayant été chassé de ses ateliers à son insu, il fera tout son possible pour soigner la jeune femme et lui permettre de retrouver son enfant. Il rend de fréquentes visites à Fantine, la fait signer et envoie de l'argent aux Thénardier. \n Entre-temps, il apprend de la bouche de Javert, qu'un homme, qui dit s'appeler Champmathieu, mais qui serait en fait l'ancien forçat Jean Valjean, va être jugé à Arras pour un vol de pommes. M. Madeleine, après une nuit de débat intérieur ( la célèbre “tempête sous un crâne”) se rend au tribunal. Il prend la défense de Champmathieu en se dénonçant. Cet aveu lui vaudra d'être arrêté par Javert dans la chambre de Fantine, qui meurt avant d'avoir revu Cosette. \n Cosette, deuxième partie \n La bataille de Waterloo \n Mai 1861. Le narrateur raconte une visite à pied sur les vestiges de la défaite napoléonienne de Waterloo ( visite que Victor Hugo fit en 1861, lors de son retour de l'Ile d'Elbe sur les lieux même de la bataille de juin 1815). Ce jour-là, Napoléon affrontait les troupes anglaises et les forces coalisées de l'Europe continentale. Victor Hugo réfléchit sur les causes de ce désastre napoléonien : il pleuvait ce jour-là, le sol était boueux, ce qui empêcha l'empereur de déployer librement son artillerie, son arme stratégique. Pire, mal renseignée, la cavalerie française se précipita dans un ravin, où beaucoup de soldats périrent, écrasés. Les renforts espérés n'arrivèrent pas . Cambronne fit passer à la postérité cette défaite héroïque. La garde impériale qu'il dirigeait lutta jusqu'au dernier carré et, lui, lança à l'ennemi son mot célèbre : “M…” \n Le narrateur relate alors une funèbre rencontre qui lui permet d'introduire un des personnages des Misérables dans cette bataille de Waterloo : pendant la nuit qui suit cette bataille, un sordide escroc dépouille les cadavres de tous leurs objets précieux. Il dégage le corps d'un officier pour lui voler sa montre. Celui-ci n'est que blessé et est persuadé que l'inconnu lui a sauvé la vie. L'officier reconnaissant, le colonel Pontmercy, demande son nom à son sauveur providentiel : c'est Thénardier. \n Le sauvetage de Toulon \n 1823. Emprisonné suite à son arrestation par Javert, Jean Valjean était parvenu à s'évader. Mais il a été repris. Il a été condamné aux travaux forcés à perpétuité et se retrouve au bagne de Toulon. Lors d'un accident sur un vaisseau de guerre rentré au port de Toulon, il sauve la vie d'un marin, ce qui lui vaut le soutien de la foule qui réclame sa grâce. il se jette à la mer et parvient à s'échapper en nageant sous le bateau. Personne ne retrouvant son corps, on le croira mort. \n Jean Valjean recueille Cosette \n Ayant retrouvé la liberté, Jean Valjean souhaite honorer la promesse qu'il avait faite à Fantine : libérer Cosette."
  
  var defaultDiacriticsRemovalap = [{
    'base': 'A',
    'letters': '\u0041\u24B6\uFF21\u00C0\u00C1\u00C2\u1EA6\u1EA4\u1EAA\u1EA8\u00C3\u0100\u0102\u1EB0\u1EAE\u1EB4\u1EB2\u0226\u01E0\u00C4\u01DE\u1EA2\u00C5\u01FA\u01CD\u0200\u0202\u1EA0\u1EAC\u1EB6\u1E00\u0104\u023A\u2C6F'
  }, {
    'base': 'AA',
    'letters': '\uA732'
  }, {
    'base': 'AE',
    'letters': '\u00C6\u01FC\u01E2'
  }, {
    'base': 'AO',
    'letters': '\uA734'
  }, {
    'base': 'AU',
    'letters': '\uA736'
  }, {
    'base': 'AV',
    'letters': '\uA738\uA73A'
  }, {
    'base': 'AY',
    'letters': '\uA73C'
  }, {
    'base': 'B',
    'letters': '\u0042\u24B7\uFF22\u1E02\u1E04\u1E06\u0243\u0182\u0181'
  }, {
    'base': 'C',
    'letters': '\u0043\u24B8\uFF23\u0106\u0108\u010A\u010C\u00C7\u1E08\u0187\u023B\uA73E'
  }, {
    'base': 'D',
    'letters': '\u0044\u24B9\uFF24\u1E0A\u010E\u1E0C\u1E10\u1E12\u1E0E\u0110\u018B\u018A\u0189\uA779'
  }, {
    'base': 'DZ',
    'letters': '\u01F1\u01C4'
  }, {
    'base': 'Dz',
    'letters': '\u01F2\u01C5'
  }, {
    'base': 'E',
    'letters': '\u0045\u24BA\uFF25\u00C8\u00C9\u00CA\u1EC0\u1EBE\u1EC4\u1EC2\u1EBC\u0112\u1E14\u1E16\u0114\u0116\u00CB\u1EBA\u011A\u0204\u0206\u1EB8\u1EC6\u0228\u1E1C\u0118\u1E18\u1E1A\u0190\u018E'
  }, {
    'base': 'F',
    'letters': '\u0046\u24BB\uFF26\u1E1E\u0191\uA77B'
  }, {
    'base': 'G',
    'letters': '\u0047\u24BC\uFF27\u01F4\u011C\u1E20\u011E\u0120\u01E6\u0122\u01E4\u0193\uA7A0\uA77D\uA77E'
  }, {
    'base': 'H',
    'letters': '\u0048\u24BD\uFF28\u0124\u1E22\u1E26\u021E\u1E24\u1E28\u1E2A\u0126\u2C67\u2C75\uA78D'
  }, {
    'base': 'I',
    'letters': '\u0049\u24BE\uFF29\u00CC\u00CD\u00CE\u0128\u012A\u012C\u0130\u00CF\u1E2E\u1EC8\u01CF\u0208\u020A\u1ECA\u012E\u1E2C\u0197'
  }, {
    'base': 'J',
    'letters': '\u004A\u24BF\uFF2A\u0134\u0248'
  }, {
    'base': 'K',
    'letters': '\u004B\u24C0\uFF2B\u1E30\u01E8\u1E32\u0136\u1E34\u0198\u2C69\uA740\uA742\uA744\uA7A2'
  }, {
    'base': 'L',
    'letters': '\u004C\u24C1\uFF2C\u013F\u0139\u013D\u1E36\u1E38\u013B\u1E3C\u1E3A\u0141\u023D\u2C62\u2C60\uA748\uA746\uA780'
  }, {
    'base': 'LJ',
    'letters': '\u01C7'
  }, {
    'base': 'Lj',
    'letters': '\u01C8'
  }, {
    'base': 'M',
    'letters': '\u004D\u24C2\uFF2D\u1E3E\u1E40\u1E42\u2C6E\u019C'
  }, {
    'base': 'N',
    'letters': '\u004E\u24C3\uFF2E\u01F8\u0143\u00D1\u1E44\u0147\u1E46\u0145\u1E4A\u1E48\u0220\u019D\uA790\uA7A4'
  }, {
    'base': 'NJ',
    'letters': '\u01CA'
  }, {
    'base': 'Nj',
    'letters': '\u01CB'
  }, {
    'base': 'O',
    'letters': '\u004F\u24C4\uFF2F\u00D2\u00D3\u00D4\u1ED2\u1ED0\u1ED6\u1ED4\u00D5\u1E4C\u022C\u1E4E\u014C\u1E50\u1E52\u014E\u022E\u0230\u00D6\u022A\u1ECE\u0150\u01D1\u020C\u020E\u01A0\u1EDC\u1EDA\u1EE0\u1EDE\u1EE2\u1ECC\u1ED8\u01EA\u01EC\u00D8\u01FE\u0186\u019F\uA74A\uA74C'
  }, {
    'base': 'OI',
    'letters': '\u01A2'
  }, {
    'base': 'OO',
    'letters': '\uA74E'
  }, {
    'base': 'OU',
    'letters': '\u0222'
  }, {
    'base': 'P',
    'letters': '\u0050\u24C5\uFF30\u1E54\u1E56\u01A4\u2C63\uA750\uA752\uA754'
  }, {
    'base': 'Q',
    'letters': '\u0051\u24C6\uFF31\uA756\uA758\u024A'
  }, {
    'base': 'R',
    'letters': '\u0052\u24C7\uFF32\u0154\u1E58\u0158\u0210\u0212\u1E5A\u1E5C\u0156\u1E5E\u024C\u2C64\uA75A\uA7A6\uA782'
  }, {
    'base': 'S',
    'letters': '\u0053\u24C8\uFF33\u1E9E\u015A\u1E64\u015C\u1E60\u0160\u1E66\u1E62\u1E68\u0218\u015E\u2C7E\uA7A8\uA784'
  }, {
    'base': 'T',
    'letters': '\u0054\u24C9\uFF34\u1E6A\u0164\u1E6C\u021A\u0162\u1E70\u1E6E\u0166\u01AC\u01AE\u023E\uA786'
  }, {
    'base': 'TZ',
    'letters': '\uA728'
  }, {
    'base': 'U',
    'letters': '\u0055\u24CA\uFF35\u00D9\u00DA\u00DB\u0168\u1E78\u016A\u1E7A\u016C\u00DC\u01DB\u01D7\u01D5\u01D9\u1EE6\u016E\u0170\u01D3\u0214\u0216\u01AF\u1EEA\u1EE8\u1EEE\u1EEC\u1EF0\u1EE4\u1E72\u0172\u1E76\u1E74\u0244'
  }, {
    'base': 'V',
    'letters': '\u0056\u24CB\uFF36\u1E7C\u1E7E\u01B2\uA75E\u0245'
  }, {
    'base': 'VY',
    'letters': '\uA760'
  }, {
    'base': 'W',
    'letters': '\u0057\u24CC\uFF37\u1E80\u1E82\u0174\u1E86\u1E84\u1E88\u2C72'
  }, {
    'base': 'X',
    'letters': '\u0058\u24CD\uFF38\u1E8A\u1E8C'
  }, {
    'base': 'Y',
    'letters': '\u0059\u24CE\uFF39\u1EF2\u00DD\u0176\u1EF8\u0232\u1E8E\u0178\u1EF6\u1EF4\u01B3\u024E\u1EFE'
  }, {
    'base': 'Z',
    'letters': '\u005A\u24CF\uFF3A\u0179\u1E90\u017B\u017D\u1E92\u1E94\u01B5\u0224\u2C7F\u2C6B\uA762'
  }, {
    'base': 'a',
    'letters': '\u0061\u24D0\uFF41\u1E9A\u00E0\u00E1\u00E2\u1EA7\u1EA5\u1EAB\u1EA9\u00E3\u0101\u0103\u1EB1\u1EAF\u1EB5\u1EB3\u0227\u01E1\u00E4\u01DF\u1EA3\u00E5\u01FB\u01CE\u0201\u0203\u1EA1\u1EAD\u1EB7\u1E01\u0105\u2C65\u0250'
  }, {
    'base': 'aa',
    'letters': '\uA733'
  }, {
    'base': 'ae',
    'letters': '\u00E6\u01FD\u01E3'
  }, {
    'base': 'ao',
    'letters': '\uA735'
  }, {
    'base': 'au',
    'letters': '\uA737'
  }, {
    'base': 'av',
    'letters': '\uA739\uA73B'
  }, {
    'base': 'ay',
    'letters': '\uA73D'
  }, {
    'base': 'b',
    'letters': '\u0062\u24D1\uFF42\u1E03\u1E05\u1E07\u0180\u0183\u0253'
  }, {
    'base': 'c',
    'letters': '\u0063\u24D2\uFF43\u0107\u0109\u010B\u010D\u00E7\u1E09\u0188\u023C\uA73F\u2184'
  }, {
    'base': 'd',
    'letters': '\u0064\u24D3\uFF44\u1E0B\u010F\u1E0D\u1E11\u1E13\u1E0F\u0111\u018C\u0256\u0257\uA77A'
  }, {
    'base': 'dz',
    'letters': '\u01F3\u01C6'
  }, {
    'base': 'e',
    'letters': '\u0065\u24D4\uFF45\u00E8\u00E9\u00EA\u1EC1\u1EBF\u1EC5\u1EC3\u1EBD\u0113\u1E15\u1E17\u0115\u0117\u00EB\u1EBB\u011B\u0205\u0207\u1EB9\u1EC7\u0229\u1E1D\u0119\u1E19\u1E1B\u0247\u025B\u01DD'
  }, {
    'base': 'f',
    'letters': '\u0066\u24D5\uFF46\u1E1F\u0192\uA77C'
  }, {
    'base': 'g',
    'letters': '\u0067\u24D6\uFF47\u01F5\u011D\u1E21\u011F\u0121\u01E7\u0123\u01E5\u0260\uA7A1\u1D79\uA77F'
  }, {
    'base': 'h',
    'letters': '\u0068\u24D7\uFF48\u0125\u1E23\u1E27\u021F\u1E25\u1E29\u1E2B\u1E96\u0127\u2C68\u2C76\u0265'
  }, {
    'base': 'hv',
    'letters': '\u0195'
  }, {
    'base': 'i',
    'letters': '\u0069\u24D8\uFF49\u00EC\u00ED\u00EE\u0129\u012B\u012D\u00EF\u1E2F\u1EC9\u01D0\u0209\u020B\u1ECB\u012F\u1E2D\u0268\u0131'
  }, {
    'base': 'j',
    'letters': '\u006A\u24D9\uFF4A\u0135\u01F0\u0249'
  }, {
    'base': 'k',
    'letters': '\u006B\u24DA\uFF4B\u1E31\u01E9\u1E33\u0137\u1E35\u0199\u2C6A\uA741\uA743\uA745\uA7A3'
  }, {
    'base': 'l',
    'letters': '\u006C\u24DB\uFF4C\u0140\u013A\u013E\u1E37\u1E39\u013C\u1E3D\u1E3B\u017F\u0142\u019A\u026B\u2C61\uA749\uA781\uA747'
  }, {
    'base': 'lj',
    'letters': '\u01C9'
  }, {
    'base': 'm',
    'letters': '\u006D\u24DC\uFF4D\u1E3F\u1E41\u1E43\u0271\u026F'
  }, {
    'base': 'n',
    'letters': '\u006E\u24DD\uFF4E\u01F9\u0144\u00F1\u1E45\u0148\u1E47\u0146\u1E4B\u1E49\u019E\u0272\u0149\uA791\uA7A5'
  }, {
    'base': 'nj',
    'letters': '\u01CC'
  }, {
    'base': 'o',
    'letters': '\u006F\u24DE\uFF4F\u00F2\u00F3\u00F4\u1ED3\u1ED1\u1ED7\u1ED5\u00F5\u1E4D\u022D\u1E4F\u014D\u1E51\u1E53\u014F\u022F\u0231\u00F6\u022B\u1ECF\u0151\u01D2\u020D\u020F\u01A1\u1EDD\u1EDB\u1EE1\u1EDF\u1EE3\u1ECD\u1ED9\u01EB\u01ED\u00F8\u01FF\u0254\uA74B\uA74D\u0275'
  }, {
    'base': 'oi',
    'letters': '\u01A3'
  }, {
    'base': 'ou',
    'letters': '\u0223'
  }, {
    'base': 'oo',
    'letters': '\uA74F'
  }, {
    'base': 'p',
    'letters': '\u0070\u24DF\uFF50\u1E55\u1E57\u01A5\u1D7D\uA751\uA753\uA755'
  }, {
    'base': 'q',
    'letters': '\u0071\u24E0\uFF51\u024B\uA757\uA759'
  }, {
    'base': 'r',
    'letters': '\u0072\u24E1\uFF52\u0155\u1E59\u0159\u0211\u0213\u1E5B\u1E5D\u0157\u1E5F\u024D\u027D\uA75B\uA7A7\uA783'
  }, {
    'base': 's',
    'letters': '\u0073\u24E2\uFF53\u00DF\u015B\u1E65\u015D\u1E61\u0161\u1E67\u1E63\u1E69\u0219\u015F\u023F\uA7A9\uA785\u1E9B'
  }, {
    'base': 't',
    'letters': '\u0074\u24E3\uFF54\u1E6B\u1E97\u0165\u1E6D\u021B\u0163\u1E71\u1E6F\u0167\u01AD\u0288\u2C66\uA787'
  }, {
    'base': 'tz',
    'letters': '\uA729'
  }, {
    'base': 'u',
    'letters': '\u0075\u24E4\uFF55\u00F9\u00FA\u00FB\u0169\u1E79\u016B\u1E7B\u016D\u00FC\u01DC\u01D8\u01D6\u01DA\u1EE7\u016F\u0171\u01D4\u0215\u0217\u01B0\u1EEB\u1EE9\u1EEF\u1EED\u1EF1\u1EE5\u1E73\u0173\u1E77\u1E75\u0289'
  }, {
    'base': 'v',
    'letters': '\u0076\u24E5\uFF56\u1E7D\u1E7F\u028B\uA75F\u028C'
  }, {
    'base': 'vy',
    'letters': '\uA761'
  }, {
    'base': 'w',
    'letters': '\u0077\u24E6\uFF57\u1E81\u1E83\u0175\u1E87\u1E85\u1E98\u1E89\u2C73'
  }, {
    'base': 'x',
    'letters': '\u0078\u24E7\uFF58\u1E8B\u1E8D'
  }, {
    'base': 'y',
    'letters': '\u0079\u24E8\uFF59\u1EF3\u00FD\u0177\u1EF9\u0233\u1E8F\u00FF\u1EF7\u1E99\u1EF5\u01B4\u024F\u1EFF'
  }, {
    'base': 'z',
    'letters': '\u007A\u24E9\uFF5A\u017A\u1E91\u017C\u017E\u1E93\u1E95\u01B6\u0225\u0240\u2C6C\uA763'
  }];
  var diacriticsMap = {};
  for (var i = 0; i < defaultDiacriticsRemovalap.length; i++) {
    var letters = defaultDiacriticsRemovalap[i].letters.split("");
    for (var j = 0; j < letters.length; j++) {
      diacriticsMap[letters[j]] = defaultDiacriticsRemovalap[i].base;
    }
  }
  var defaultDiacriticsRemovalMap = [{
    'base': 'A',
    'letters': /[\u0041\u24B6\uFF21\u00C0\u00C1\u00C2\u1EA6\u1EA4\u1EAA\u1EA8\u00C3\u0100\u0102\u1EB0\u1EAE\u1EB4\u1EB2\u0226\u01E0\u00C4\u01DE\u1EA2\u00C5\u01FA\u01CD\u0200\u0202\u1EA0\u1EAC\u1EB6\u1E00\u0104\u023A\u2C6F]/g
  }, {
    'base': 'AA',
    'letters': /[\uA732]/g
  }, {
    'base': 'AE',
    'letters': /[\u00C6\u01FC\u01E2]/g
  }, {
    'base': 'AO',
    'letters': /[\uA734]/g
  }, {
    'base': 'AU',
    'letters': /[\uA736]/g
  }, {
    'base': 'AV',
    'letters': /[\uA738\uA73A]/g
  }, {
    'base': 'AY',
    'letters': /[\uA73C]/g
  }, {
    'base': 'B',
    'letters': /[\u0042\u24B7\uFF22\u1E02\u1E04\u1E06\u0243\u0182\u0181]/g
  }, {
    'base': 'C',
    'letters': /[\u0043\u24B8\uFF23\u0106\u0108\u010A\u010C\u00C7\u1E08\u0187\u023B\uA73E]/g
  }, {
    'base': 'D',
    'letters': /[\u0044\u24B9\uFF24\u1E0A\u010E\u1E0C\u1E10\u1E12\u1E0E\u0110\u018B\u018A\u0189\uA779]/g
  }, {
    'base': 'DZ',
    'letters': /[\u01F1\u01C4]/g
  }, {
    'base': 'Dz',
    'letters': /[\u01F2\u01C5]/g
  }, {
    'base': 'E',
    'letters': /[\u0045\u24BA\uFF25\u00C8\u00C9\u00CA\u1EC0\u1EBE\u1EC4\u1EC2\u1EBC\u0112\u1E14\u1E16\u0114\u0116\u00CB\u1EBA\u011A\u0204\u0206\u1EB8\u1EC6\u0228\u1E1C\u0118\u1E18\u1E1A\u0190\u018E]/g
  }, {
    'base': 'F',
    'letters': /[\u0046\u24BB\uFF26\u1E1E\u0191\uA77B]/g
  }, {
    'base': 'G',
    'letters': /[\u0047\u24BC\uFF27\u01F4\u011C\u1E20\u011E\u0120\u01E6\u0122\u01E4\u0193\uA7A0\uA77D\uA77E]/g
  }, {
    'base': 'H',
    'letters': /[\u0048\u24BD\uFF28\u0124\u1E22\u1E26\u021E\u1E24\u1E28\u1E2A\u0126\u2C67\u2C75\uA78D]/g
  }, {
    'base': 'I',
    'letters': /[\u0049\u24BE\uFF29\u00CC\u00CD\u00CE\u0128\u012A\u012C\u0130\u00CF\u1E2E\u1EC8\u01CF\u0208\u020A\u1ECA\u012E\u1E2C\u0197]/g
  }, {
    'base': 'J',
    'letters': /[\u004A\u24BF\uFF2A\u0134\u0248]/g
  }, {
    'base': 'K',
    'letters': /[\u004B\u24C0\uFF2B\u1E30\u01E8\u1E32\u0136\u1E34\u0198\u2C69\uA740\uA742\uA744\uA7A2]/g
  }, {
    'base': 'L',
    'letters': /[\u004C\u24C1\uFF2C\u013F\u0139\u013D\u1E36\u1E38\u013B\u1E3C\u1E3A\u0141\u023D\u2C62\u2C60\uA748\uA746\uA780]/g
  }, {
    'base': 'LJ',
    'letters': /[\u01C7]/g
  }, {
    'base': 'Lj',
    'letters': /[\u01C8]/g
  }, {
    'base': 'M',
    'letters': /[\u004D\u24C2\uFF2D\u1E3E\u1E40\u1E42\u2C6E\u019C]/g
  }, {
    'base': 'N',
    'letters': /[\u004E\u24C3\uFF2E\u01F8\u0143\u00D1\u1E44\u0147\u1E46\u0145\u1E4A\u1E48\u0220\u019D\uA790\uA7A4]/g
  }, {
    'base': 'NJ',
    'letters': /[\u01CA]/g
  }, {
    'base': 'Nj',
    'letters': /[\u01CB]/g
  }, {
    'base': 'O',
    'letters': /[\u004F\u24C4\uFF2F\u00D2\u00D3\u00D4\u1ED2\u1ED0\u1ED6\u1ED4\u00D5\u1E4C\u022C\u1E4E\u014C\u1E50\u1E52\u014E\u022E\u0230\u00D6\u022A\u1ECE\u0150\u01D1\u020C\u020E\u01A0\u1EDC\u1EDA\u1EE0\u1EDE\u1EE2\u1ECC\u1ED8\u01EA\u01EC\u00D8\u01FE\u0186\u019F\uA74A\uA74C]/g
  }, {
    'base': 'OI',
    'letters': /[\u01A2]/g
  }, {
    'base': 'OO',
    'letters': /[\uA74E]/g
  }, {
    'base': 'OU',
    'letters': /[\u0222]/g
  }, {
    'base': 'P',
    'letters': /[\u0050\u24C5\uFF30\u1E54\u1E56\u01A4\u2C63\uA750\uA752\uA754]/g
  }, {
    'base': 'Q',
    'letters': /[\u0051\u24C6\uFF31\uA756\uA758\u024A]/g
  }, {
    'base': 'R',
    'letters': /[\u0052\u24C7\uFF32\u0154\u1E58\u0158\u0210\u0212\u1E5A\u1E5C\u0156\u1E5E\u024C\u2C64\uA75A\uA7A6\uA782]/g
  }, {
    'base': 'S',
    'letters': /[\u0053\u24C8\uFF33\u1E9E\u015A\u1E64\u015C\u1E60\u0160\u1E66\u1E62\u1E68\u0218\u015E\u2C7E\uA7A8\uA784]/g
  }, {
    'base': 'T',
    'letters': /[\u0054\u24C9\uFF34\u1E6A\u0164\u1E6C\u021A\u0162\u1E70\u1E6E\u0166\u01AC\u01AE\u023E\uA786]/g
  }, {
    'base': 'TZ',
    'letters': /[\uA728]/g
  }, {
    'base': 'U',
    'letters': /[\u0055\u24CA\uFF35\u00D9\u00DA\u00DB\u0168\u1E78\u016A\u1E7A\u016C\u00DC\u01DB\u01D7\u01D5\u01D9\u1EE6\u016E\u0170\u01D3\u0214\u0216\u01AF\u1EEA\u1EE8\u1EEE\u1EEC\u1EF0\u1EE4\u1E72\u0172\u1E76\u1E74\u0244]/g
  }, {
    'base': 'V',
    'letters': /[\u0056\u24CB\uFF36\u1E7C\u1E7E\u01B2\uA75E\u0245]/g
  }, {
    'base': 'VY',
    'letters': /[\uA760]/g
  }, {
    'base': 'W',
    'letters': /[\u0057\u24CC\uFF37\u1E80\u1E82\u0174\u1E86\u1E84\u1E88\u2C72]/g
  }, {
    'base': 'X',
    'letters': /[\u0058\u24CD\uFF38\u1E8A\u1E8C]/g
  }, {
    'base': 'Y',
    'letters': /[\u0059\u24CE\uFF39\u1EF2\u00DD\u0176\u1EF8\u0232\u1E8E\u0178\u1EF6\u1EF4\u01B3\u024E\u1EFE]/g
  }, {
    'base': 'Z',
    'letters': /[\u005A\u24CF\uFF3A\u0179\u1E90\u017B\u017D\u1E92\u1E94\u01B5\u0224\u2C7F\u2C6B\uA762]/g
  }, {
    'base': 'a',
    'letters': /[\u0061\u24D0\uFF41\u1E9A\u00E0\u00E1\u00E2\u1EA7\u1EA5\u1EAB\u1EA9\u00E3\u0101\u0103\u1EB1\u1EAF\u1EB5\u1EB3\u0227\u01E1\u00E4\u01DF\u1EA3\u00E5\u01FB\u01CE\u0201\u0203\u1EA1\u1EAD\u1EB7\u1E01\u0105\u2C65\u0250]/g
  }, {
    'base': 'aa',
    'letters': /[\uA733]/g
  }, {
    'base': 'ae',
    'letters': /[\u00E6\u01FD\u01E3]/g
  }, {
    'base': 'ao',
    'letters': /[\uA735]/g
  }, {
    'base': 'au',
    'letters': /[\uA737]/g
  }, {
    'base': 'av',
    'letters': /[\uA739\uA73B]/g
  }, {
    'base': 'ay',
    'letters': /[\uA73D]/g
  }, {
    'base': 'b',
    'letters': /[\u0062\u24D1\uFF42\u1E03\u1E05\u1E07\u0180\u0183\u0253]/g
  }, {
    'base': 'c',
    'letters': /[\u0063\u24D2\uFF43\u0107\u0109\u010B\u010D\u00E7\u1E09\u0188\u023C\uA73F\u2184]/g
  }, {
    'base': 'd',
    'letters': /[\u0064\u24D3\uFF44\u1E0B\u010F\u1E0D\u1E11\u1E13\u1E0F\u0111\u018C\u0256\u0257\uA77A]/g
  }, {
    'base': 'dz',
    'letters': /[\u01F3\u01C6]/g
  }, {
    'base': 'e',
    'letters': /[\u0065\u24D4\uFF45\u00E8\u00E9\u00EA\u1EC1\u1EBF\u1EC5\u1EC3\u1EBD\u0113\u1E15\u1E17\u0115\u0117\u00EB\u1EBB\u011B\u0205\u0207\u1EB9\u1EC7\u0229\u1E1D\u0119\u1E19\u1E1B\u0247\u025B\u01DD]/g
  }, {
    'base': 'f',
    'letters': /[\u0066\u24D5\uFF46\u1E1F\u0192\uA77C]/g
  }, {
    'base': 'g',
    'letters': /[\u0067\u24D6\uFF47\u01F5\u011D\u1E21\u011F\u0121\u01E7\u0123\u01E5\u0260\uA7A1\u1D79\uA77F]/g
  }, {
    'base': 'h',
    'letters': /[\u0068\u24D7\uFF48\u0125\u1E23\u1E27\u021F\u1E25\u1E29\u1E2B\u1E96\u0127\u2C68\u2C76\u0265]/g
  }, {
    'base': 'hv',
    'letters': /[\u0195]/g
  }, {
    'base': 'i',
    'letters': /[\u0069\u24D8\uFF49\u00EC\u00ED\u00EE\u0129\u012B\u012D\u00EF\u1E2F\u1EC9\u01D0\u0209\u020B\u1ECB\u012F\u1E2D\u0268\u0131]/g
  }, {
    'base': 'j',
    'letters': /[\u006A\u24D9\uFF4A\u0135\u01F0\u0249]/g
  }, {
    'base': 'k',
    'letters': /[\u006B\u24DA\uFF4B\u1E31\u01E9\u1E33\u0137\u1E35\u0199\u2C6A\uA741\uA743\uA745\uA7A3]/g
  }, {
    'base': 'l',
    'letters': /[\u006C\u24DB\uFF4C\u0140\u013A\u013E\u1E37\u1E39\u013C\u1E3D\u1E3B\u017F\u0142\u019A\u026B\u2C61\uA749\uA781\uA747]/g
  }, {
    'base': 'lj',
    'letters': /[\u01C9]/g
  }, {
    'base': 'm',
    'letters': /[\u006D\u24DC\uFF4D\u1E3F\u1E41\u1E43\u0271\u026F]/g
  }, {
    'base': 'n',
    'letters': /[\u006E\u24DD\uFF4E\u01F9\u0144\u00F1\u1E45\u0148\u1E47\u0146\u1E4B\u1E49\u019E\u0272\u0149\uA791\uA7A5]/g
  }, {
    'base': 'nj',
    'letters': /[\u01CC]/g
  }, {
    'base': 'o',
    'letters': /[\u006F\u24DE\uFF4F\u00F2\u00F3\u00F4\u1ED3\u1ED1\u1ED7\u1ED5\u00F5\u1E4D\u022D\u1E4F\u014D\u1E51\u1E53\u014F\u022F\u0231\u00F6\u022B\u1ECF\u0151\u01D2\u020D\u020F\u01A1\u1EDD\u1EDB\u1EE1\u1EDF\u1EE3\u1ECD\u1ED9\u01EB\u01ED\u00F8\u01FF\u0254\uA74B\uA74D\u0275]/g
  }, {
    'base': 'oi',
    'letters': /[\u01A3]/g
  }, {
    'base': 'ou',
    'letters': /[\u0223]/g
  }, {
    'base': 'oo',
    'letters': /[\uA74F]/g
  }, {
    'base': 'p',
    'letters': /[\u0070\u24DF\uFF50\u1E55\u1E57\u01A5\u1D7D\uA751\uA753\uA755]/g
  }, {
    'base': 'q',
    'letters': /[\u0071\u24E0\uFF51\u024B\uA757\uA759]/g
  }, {
    'base': 'r',
    'letters': /[\u0072\u24E1\uFF52\u0155\u1E59\u0159\u0211\u0213\u1E5B\u1E5D\u0157\u1E5F\u024D\u027D\uA75B\uA7A7\uA783]/g
  }, {
    'base': 's',
    'letters': /[\u0073\u24E2\uFF53\u00DF\u015B\u1E65\u015D\u1E61\u0161\u1E67\u1E63\u1E69\u0219\u015F\u023F\uA7A9\uA785\u1E9B]/g
  }, {
    'base': 't',
    'letters': /[\u0074\u24E3\uFF54\u1E6B\u1E97\u0165\u1E6D\u021B\u0163\u1E71\u1E6F\u0167\u01AD\u0288\u2C66\uA787]/g
  }, {
    'base': 'tz',
    'letters': /[\uA729]/g
  }, {
    'base': 'u',
    'letters': /[\u0075\u24E4\uFF55\u00F9\u00FA\u00FB\u0169\u1E79\u016B\u1E7B\u016D\u00FC\u01DC\u01D8\u01D6\u01DA\u1EE7\u016F\u0171\u01D4\u0215\u0217\u01B0\u1EEB\u1EE9\u1EEF\u1EED\u1EF1\u1EE5\u1E73\u0173\u1E77\u1E75\u0289]/g
  }, {
    'base': 'v',
    'letters': /[\u0076\u24E5\uFF56\u1E7D\u1E7F\u028B\uA75F\u028C]/g
  }, {
    'base': 'vy',
    'letters': /[\uA761]/g
  }, {
    'base': 'w',
    'letters': /[\u0077\u24E6\uFF57\u1E81\u1E83\u0175\u1E87\u1E85\u1E98\u1E89\u2C73]/g
  }, {
    'base': 'x',
    'letters': /[\u0078\u24E7\uFF58\u1E8B\u1E8D]/g
  }, {
    'base': 'y',
    'letters': /[\u0079\u24E8\uFF59\u1EF3\u00FD\u0177\u1EF9\u0233\u1E8F\u00FF\u1EF7\u1E99\u1EF5\u01B4\u024F\u1EFF]/g
  }, {
    'base': 'z',
    'letters': /[\u007A\u24E9\uFF5A\u017A\u1E91\u017C\u017E\u1E93\u1E95\u01B6\u0225\u0240\u2C6C\uA763]/g
  }];

};
</script>

Test runner

Warning! For accurate results, please disable Firebug before running the tests. (Why?)

Java applet disabled.

Testing in CCBot 2.0.0 / Other 0.0.0
Test Ops/sec
a different loop
var changes;

function removeDiacritics(str) {
  if (!changes) {
    changes = defaultDiacriticsRemovalMap;
  }
  for (var i = 0, len = changes.length; i < len; i++) {
    str = str.replace(changes[i].letters, changes[i].base);
  }
  return str;
}
removeDiacritics(teste);
pending…
StringBuilder
function removeDiacritics(str) {
  var letters = str.split("");
  var newStr = "";
  for (var i = 0, len = letters.length; i < len; i++) {
    var letter = letters[i];
    newStr += letter in diacriticsMap ? diacriticsMap[letter] : letter;
  }
  return newStr;
}
removeDiacritics(teste);
pending…
ArrayBuffer
function removeDiacritics(str) {
  var letters = str.split("");
  var newStr = new Array(letters.length);
  for (var i = 0; i < letters.length; i++) {
    var letter = letters[i];
    newStr[i] = letter in diacriticsMap ? diacriticsMap[letter] : letter;
  }
  return newStr.join("");
}
removeDiacritics(teste);
pending…
Better Regexp
function removeDiacritics(str) {
  return str.replace(/./g, function(letter) {
    return letter in diacriticsMap ? diacriticsMap[letter] : letter;
  });
}
removeDiacritics(teste);
pending…
String Iteration
// essentially the same as StringBuilder without calling str.split("")

function removeDiacritics(str) {
  var newStr = "";
  var letter;
  for (var i = 0, len = str.length; i < len; i++) {
    letter = str[i];
    newStr += letter in diacriticsMap ? diacriticsMap[letter] : letter;
  }
  return newStr;
}
removeDiacritics(teste);
pending…
String Iteration without in
function removeDiacritics(str) {

  var length = str.length,
    result = '',
    i;

  for (i = 0; i < length; i++) {
    // Seriously: DO NOT use "in", it's slow as hell
    result += diacriticsMap[str[i]] || str[i];
  }
  return result;
}

removeDiacritics(teste);
pending…
Regex with String Iteration
function removeDiacritics(str) {
  return str.replace(/[^A-Za-z0-9\[\] ]/g, function(a) {
    return diacriticsMap[a] || a;
  });
}
removeDiacritics(teste);
pending…
What?
function removeDiacritics(str) {
  return str.replace(/[^\u0000-\u007E]/g, function(a) {
    return diacriticsMap[a] || a;
  });
}
removeDiacritics(teste);
pending…
loop
function removeDiacritics(str) {
   var i, l, c, ret='';
   if (!str || str.length < 1) return str;
   for (i = 0, l = str.length; i < l; i++) {
     c = str.charAt(i);
     ret += diacriticsMap[c] || c;
   }
   return ret;
}

removeDiacritics(teste)
pending…
uni range + named function
function removeDiacritics(str) {
  function match (a) { return diacriticsMap[a] || a; }
  return str.replace( /[^\u0000-\u007E]/g, match );
}
removeDiacritics(teste);
pending…

Compare results of other browsers

Revisions

You can edit these tests or add even more tests to this page by appending /edit to the URL.

0 Comments