JavaScript正则表达式用于比较两个字符串

5
我想在javascript中使用正则表达式来比较两个字符串。
以下是要求 - String1 = 'xyz.east.abc.com' String2 = 'xyz.*.abc.com' String3 = 'pqr.west.efg.com' String4 = 'pqr.*.efg.com'
我希望能够通过使用正则表达式来比较上述字符串,并且输出应为String1和String2相同,String3和String4相同。
我尝试了不同的组合,但我无法找出正确的正则表达式来执行任务。

RegExp - zerkms
这里的星号(*)符号是一个字符还是通配符? - Mr. X
3个回答

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

在这里,您需要转义所有正则表达式元字符,但不包括*,然后将其替换为.*,它表示“任意数量的任何字符”。然后,您可以将创建的正则表达式与要比较的字符串进行比较。相对于使用正则表达式字面量,这种解决方案更好(针对您解释的任务),因为您不需要硬编码所有目标正则表达式,而可以在运行时执行。JSFiddle:http://jsfiddle.net/60b78b8o/

谢谢你,zerkms。这正是我在寻找的确切解决方案,还感谢你解释了逻辑。 - azhar_salati

2
^xyz\.[^.]*\.abc\.com$

您可以使用这个方法来处理 字符串1字符串2。将abc替换为efg以匹配字符串3字符串4。请参见演示。 https://regex101.com/r/tJ2mW5/19

1

您可以使用/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,如果您想要数字、区分大小写等,则需要进行修改。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接