我想在javascript中使用正则表达式比较两个字符串。
以下是要求 -
String1 =' xyz.east.abc.com'
String2 =' xyz。*。abc.com'
String3 =' pqr.west.efg.com'
String4 =' pqr。*。efg.com'
我想要一个正则表达式,我应该能够比较上面的字符串,输出应该是String1& String2相同且String3& String4是相同的。
我尝试过使用不同的组合但是我无法找出正确的正则表达式来执行任务。
答案 0 :(得分:3)
你可以实现一个能够为你做到这一点的小功能:
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/
答案 1 :(得分:1)
^xyz\.[^.]*\.abc\.com$
您可以将其用于string 1
和string 2
。将abc
更改为efg
以匹配string 3
和string 4
。请参阅演示。< / p>
答案 2 :(得分:1)
您可以使用/xyz.[a-z]*.abc.com/
匹配任何以xyz开头的字符串,然后使用a-z charectors的组合,然后结束.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,所以如果你想要数字,区分大小写等你需要修改它