如何在 NodeJS 中检测相似的 URL 但使用不同的语言?
How to detect similar URLs but dut diffrent languages in NodeJS?
我正在尝试从 URL 数组中检测相似的 URL。
我需要比较设置不同的 URL 并测试它们是否最初是相同的 URL?
举个例子,我希望 example.com/en/open should be detected similar to example.com/es/open and similar to example.com/open. Another example for a website like booking.com I'm expecting that https://www.booking.com/index.ar.htm should be detected similar to https://www.booking.com/index.en.htm
任何想法!
如果您要查找的两种语言代码方案由您显示的示例 URLs 识别:
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 中自然出现的规范字符集。这基本上会中和语言代码,然后您可以比较剩余的 URLs:
仅供参考,这里有一个语言代码列表: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, "_._");
}
如果您随后对要比较的两个 URL 中的每一个都调用 removeLanguageIdentifier(url)
并比较每个函数的结果,那么您将中和两者之间的任何两个字母国家/地区您显示的分隔符。
注意:这并非万无一失。如果某人有一个常规的 URL,带有两个字母的国家/地区代码作为路径段,而这本身并不是一种语言代码,那么现在您可以通过一种方式来了解它是否是应该被解释为一种语言代码,除非您事先了解该特定域如何对其 URL 进行编码并且可以将其构建到您的函数中。
因此,利用您提供的有限信息,我们能做的最好的事情就是"guess"了解您提供的三种形式的语言代码。
我正在尝试从 URL 数组中检测相似的 URL。 我需要比较设置不同的 URL 并测试它们是否最初是相同的 URL? 举个例子,我希望 example.com/en/open should be detected similar to example.com/es/open and similar to example.com/open. Another example for a website like booking.com I'm expecting that https://www.booking.com/index.ar.htm should be detected similar to https://www.booking.com/index.en.htm
任何想法!
如果您要查找的两种语言代码方案由您显示的示例 URLs 识别:
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 中自然出现的规范字符集。这基本上会中和语言代码,然后您可以比较剩余的 URLs:
仅供参考,这里有一个语言代码列表: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, "_._");
}
如果您随后对要比较的两个 URL 中的每一个都调用 removeLanguageIdentifier(url)
并比较每个函数的结果,那么您将中和两者之间的任何两个字母国家/地区您显示的分隔符。
注意:这并非万无一失。如果某人有一个常规的 URL,带有两个字母的国家/地区代码作为路径段,而这本身并不是一种语言代码,那么现在您可以通过一种方式来了解它是否是应该被解释为一种语言代码,除非您事先了解该特定域如何对其 URL 进行编码并且可以将其构建到您的函数中。
因此,利用您提供的有限信息,我们能做的最好的事情就是"guess"了解您提供的三种形式的语言代码。