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

问题描述 投票:0回答:3

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

以下是要求 -

String1 = 'xyz.east.abc.com'
String2 = 'xyz.*.abc.com'
String3 = 'pqr.west.efg.com'
String4 = 'pqr.*.efg.com'

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

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

javascript regex
3个回答
5
投票

您可以实现一个小函数来为您做到这一点:

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/


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

您可以将其用于

string 1
string 2
。将
abc
更改为
efg
以匹配
string 3
string 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,所以如果你想要数字、区分大小写等,你需要修改它

© www.soinside.com 2019 - 2024. All rights reserved.