Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript正则表达式_Javascript_Regex - Fatal编程技术网

JavaScript正则表达式

JavaScript正则表达式,javascript,regex,Javascript,Regex,接下来,我需要以不区分大小写的方式比较两个字符串,忽略JavaScript中除逗号和分号以外的任何非字母数字字符。所以 Times New Roman, Times, Sans-Serif 火柴 Times New Roman,Times,SansSerif 有人能让我从正确的功能/方法开始吗?在JS中是否有现成的方法可以做到这一点,或者我必须从两个字符串中删除所有杂乱的内容并进行比较?将两个字符串规范化并进行比较: str1.toLowerCase().replac

接下来,我需要以不区分大小写的方式比较两个字符串,忽略JavaScript中除逗号和分号以外的任何非字母数字字符。所以

Times New Roman, Times, Sans-Serif
火柴

Times New Roman,Times,SansSerif            

有人能让我从正确的功能/方法开始吗?在JS中是否有现成的方法可以做到这一点,或者我必须从两个字符串中删除所有杂乱的内容并进行比较?

将两个字符串规范化并进行比较:

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

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

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

s/[^a-zA-Z0-9,;]+/""/g
然后比较它们。

或者:

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,''));

秋葵的方法-但更干净的阅读

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);
}

建议的正则表达式可以用内置字符类缩短。其次,规范化应该与平等性测试分开。在我工作的地方,这里有些东西可能无法通过代码审查,但它太短了,我想我应该发布一下

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!");

不符合OP的要求-具体来说,RE不会保留分号或数字。另外,
/^(+){2}$/i
可能真的很聪明,但是它比“s1==s2”计算起来更昂贵,感谢您指出了所需的数字和分号。这个测试不是很聪明,但是它只需要做一个测试,因为只有一个案例可以满足这个条件。replace是regexp必须工作的地方-运行一次而不是两次,并且不转换成小写应该可以保存一些东西。您的意思是
/^(+.+)\1$/
-意识到
(.+){2}
将匹配任何具有2个字符的字符串。添加了这个更改后,我做了一些性能测试。您的regexp的性能比gumbos稍差一些,偶尔会超过我的。在您提供的匹配案例中(10000次迭代,10次循环,抛出方差和舍入):Gumbo 108,Me 131,you 132。四倍字符串大小秋葵:293,我:311,你:415。四元字符串+在s2开头添加1个字符:您的增加到503,我们的保持不变。还有-你的仍然会在
var s1='Times New Roman,Times,Times New Roman'上匹配;变量s2=',乘以'