JavaScript Regex - PullRequest
       5

JavaScript Regex

0 голосов
/ 25 декабря 2009

В ответ на этот вопрос мне нужно сравнить две строки без учета регистра, игнорируя любые не алфавитно-цифровые символы , кроме запятой и точки с запятой в JavaScript. Так

Times New Roman, Times, Sans-Serif

соответствует

Times New Roman,Times,SansSerif            

Может кто-нибудь заставить меня начать с правильной функции / подхода? Есть ли что-то готовое для этого в JS, или мне нужно вырезать весь беспорядок из обеих строк и сравнить их тогда?

Ответы [ 5 ]

5 голосов
/ 25 декабря 2009

Нормализуйте обе строки и сравните их:

str1.toLowerCase().replace(/[^a-z0-9,;]+/g, "") == str2.toLowerCase().replace(/[^a-z0-9,;]+/g, "")

Здесь строки преобразуются в нижний регистр, а затем перед сравнением удаляются все символы, кроме буквенно-цифровых символов, запятой и точки с запятой.

3 голосов
/ 25 декабря 2009

метод Гамбо - но чище читать.

function compareStripped(str1, str2) {
  function strip(str) {
    // lower case and removes anything but letters, numbers, commas and semi-colons
    return str.toLowerCase().replace(/[^a-z0-9,;]+/g,'');
  }
  return strip(str1) == strip(str2);
}
0 голосов
/ 25 декабря 2009

Предлагаемое регулярное выражение может быть сокращено с помощью встроенных классов символов. Во-вторых, нормализация должна быть отделена от теста на равенство. Вот что-то, что может не пройти проверку кода, где я работаю, но оно настолько короткое, что я решил написать.

String.prototype.normalized = function() { 
 return this.replace(/[^\w\d,;]/g,"");
};

var s1='Times New Roman, Times, Sans-Serif';
var s2='Times New Roman,Times,SansSerif';

if(s1.normalized() == s2.normalized()) document.write("equality!");
0 голосов
/ 25 декабря 2009

Или это:

var s1='Times New Roman, Times, Sans-Serif';
var s2='Times New Roman,Times,SansSerif';


/^(.+){2}$/i.test((s1+s2).replace(/[^\da-zA-Z,;]/g,''));
0 голосов
/ 25 декабря 2009

первый поиск и замена в обеих строках:

s/[^a-zA-Z0-9,;]+/""/g

, а затем сравните их.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...