JavaScript 正则表达式

JavaScript Regex

在此问题的后续行动中,我需要以不区分大小写的方式比较两个字符串,忽略 JavaScript 中除逗号和分号之外的任何非字母数字字符。所以

1
Times New Roman, Times, Sans-Serif

匹配

1
Times New Roman,Times,SansSerif

有人可以让我开始使用正确的功能/方法吗?在 JS 中是否有现成的东西可以做到这一点,或者我是否必须从两个字符串中删除所有杂乱的东西然后比较它们?


标准化两个字符串并比较它们:

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

这里将字符串转换为小写,然后在比较之前删除除字母数字字符、逗号和分号之外的所有字符。


Gumbo 的方法 - 但更清晰易读。

1
2
3
4
5
6
7
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);
}

建议的正则表达式可以使用内置字符类来缩短。其次,规范化应该与相等性测试分开。这是我工作的地方可能无法通过代码审查的内容,但它太短了,我想我会发布。

1
2
3
4
5
6
7
8
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!");

或者这个:

1
2
3
4
5
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,''));


首先搜索并替换两个字符串:

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

然后比较它们。