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

问题描述 投票:-1回答:1

我正在尝试从URL数组中检测类似的URL。我需要比较设置不同的URL并测试它们是否最初是相同的URL?至于一个例子,我期待example.com/en/open应该被检测到类似于example.com/es/open和类似于example.com/open。像booking.com这样的网站的另一个例子我期待https://www.booking.com/index.ar.htm应该被发现类似于https://www.booking.com/index.en.htm

有任何想法吗!

javascript node.js string string-comparison
1个回答
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");
}

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

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

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

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