如何检测类似的URL但在NodeJS中使用不同的语言?

时间:2017-12-24 13:58:02

标签: javascript node.js string string-comparison

我试图从一组URL中检测类似的URL。 我需要比较设置不同的URL并测试它们是否最初是相同的URL? 至于一个例子,我期望default Stream<E> parallelStream()应该被检测到类似于example.com/en/open并且类似于example.com/es/open。像booking.com这样的网站的另一个例子我应该检测example.com/open类似于https://www.booking.com/index.ar.htm

任何想法!

1 个答案:

答案 0 :(得分:1)

如果您要查找的两种语言代码方案由您显示的示例网址标识:

https://www.booking.com/index.en.htm
https://www.booking.com/index.ar.htm

http://example.com/en/open
http://example.com/es/open

http://example.com/en
http://example.com/es

然后,您可以设计一个正则表达式,它将在斜杠或句点的分隔符之间用一个不太可能在URL中自然出现的规范字符集替换任何两个字母的语言代码。这基本上会中和语言代码,然后您可以比较剩余的URL:

仅供参考,这里有一个语言代码列表:https://www.loc.gov/standards/iso639-2/php/code_list.php

function removeLanguageIdentifier(url) {
    let re = /([\/\.])(aa|ab|af|ad|sq|am|ar|an|hy|as|av|ae|ay|az|ba|bm|eu|be|bn|bh|bi|bo|bs|br|bg|my|ca|cs|ch|ce|zh|cu|cv|kw|co|cr|cy|cs|da|de|dv|nl|dz|el|en|eo|et|eu|ee|fo|fa|fj|fi|fr|fy|ff|ka|gd|fa|dl|gv|el|gn|gu|ht|ja|he|hz|hi|ho|hr|hu|hy|ig|is|io|ii|iu|ie|ia|id|ik|is|it|jv|ja|kl|kn|ks|ka|kr|kk|km|ki|rw|ky|kv|kg|ko|kj|ku|lo|la|lv|li|ln|lt|lb|lu|lg|mk|mh|ml|mi|mr|ms|mk|mg|mt|mn|mi|ms|my|na|nv|nr|nd|ng|ne|nl|nn|nb|no|ny|oc|oj|or|om|os|pa|fa|pi|pl|pt|ps|qu|rm|ro|rn|sg|sa|si|sk|sl|se|sm|sn|sd|so|st|es|sq|sc|sr|ss|su|sw|sv|ty|ta|tt|te|tg|tl|th|bo|ti|to|tn|ts|tk|tf|tw|ug|uk|ur|uz|ve|vi|vo|cy|wa|wo|xh|yi|yo|za|zh|zu])([\/\.$])/i;
    return url.replace(re, "$1_._$3");
}

如果您只是在要比较的两个网址中的每个网址上调用removeLanguageIdentifier(url)并比较每个网址的结果,那么您将中和您显示的两个分隔符之间的任意两个字母国家/地区。

注意:这不是万无一失的。如果某人有一个带有双字母国家代码的常规URL作为路径段,而这些路径段本身并不是一个语言代码,那么现在有办法让你知道一种方式或另一种方法,如果它应该被解释作为语言代码,除非您事先了解该特定域如何对其URL进行编码,并将这些智能构建到您的函数中。

因此,我们使用您提供的有限信息所能做的最好的事情是对您所提供的三种表格的语言代码进行有根据的“猜测”。