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 |
然后比较它们。