Javascript正则表达式比较两个字符串

azh*_*ati 5 javascript regex

我想在 javascript 中使用正则表达式比较两个字符串。

以下是要求 -

String1 = 'xyz.east.abc.com'

String2 = 'xyz.*.abc.com'

String3 = 'pqr.west.efg.com'

String4 = 'pqr.*.efg.com'

我想要一个正则表达式,通过它我应该能够比较上面的字符串,并且输出应该是 String1 和 String2 相同,String3 和 String4 相同。

我尝试过使用不同的组合,但无法找出执行任务的正确正则表达式。

zer*_*kms 4

您可以实现一个小函数来为您完成此操作:

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);
}
Run Code Online (Sandbox Code Playgroud)

因此,您在这里所做的就是转义所有正则表达式元字符 but *,然后将其替换为.*意味着“任意数量的任意字符”。

然后,您根据要比较的字符串测试创建的正则表达式。

该解决方案比使用正则表达式更好(对于您所解释的任务),因为您不需要对所有目标正则表达式进行硬编码,并且可以在运行时执行此操作。

JSFiddle:http://jsfiddle.net/60b78b8o/