我想在 javascript 中使用正则表达式比较两个字符串。
以下是要求 -
String1 = 'xyz.east.abc.com'
String2 = 'xyz.*.abc.com'
String3 = 'pqr.west.efg.com'
String4 = 'pqr.*.efg.com'
我想要一个正则表达式,通过它我应该能够比较上面的字符串,并且输出应该是 String1 和 String2 相同,String3 和 String4 相同。
我尝试使用不同的组合,但我无法找出执行任务的正确正则表达式。
您可以实现一个小函数来为您做到这一点:
function escapeRegExp(str) {
return str.replace(/[\-\[\]\/\{\}\(\)\+\?\.\\\^\$\|]/g, "\\$&");
}
function fuzzyComparison(str, mask) {
var regex = '^' + escapeRegExp(mask).replace(/\*/, '.*') + '$';
var r = new RegExp(regex);
return r.test(str);
}
因此,您在这里所做的就是转义除
*
之外的所有正则表达式元字符,然后将其替换为 .*
,这意味着“任意数量的任意字符”。
然后根据要比较的字符串测试创建的正则表达式。
此解决方案比使用正则表达式更好(对于您所解释的任务),因为您不需要对所有目标正则表达式进行硬编码,并且可以在运行时执行此操作。
JSFiddle:http://jsfiddle.net/60b78b8o/
^xyz\.[^.]*\.abc\.com$
您可以将其用于
string 1
和 string 2
。将 abc
更改为 efg
以匹配 string 3
和 string 4
。参见演示。
您可以使用
/xyz.[a-z]*.abc.com/
来匹配任何以 xyz. 开头的字符串,然后是 a-z 字符的组合,最后以 .abc.com 结尾
var x = /xyz.[a-z]*.abc.com/.test("xyz.etetjh.abc.com");
//or
var x = /xyz.[a-z]*.abc.com/.test("xyz.east.abc.com");
console.log(x); // will output true.
这只允许在变量部分使用 a-z,所以如果你想要数字、区分大小写等,你需要修改它