我正在处理从Google App Script上的独立脚本处理其组成部分的URL。
我的问题是网上的正则表达式建筑工具告诉我我的正则表达式是正确的,但我只得到一个值。
具体来说,我的代码是:
function UrlComponents(url) {
const _urlMatchPattern = /^((http[s]?):\/)?\/?([^:\/\s]+)(:([^\/]*))?((\/\w+)*\/)([\w\-\.]+[^#?\s]+)(\?([^#]*))?(#(.*))?$/mig; // Source: http://stackoverflow.com/questions/27745/getting-parts-of-a-url-regex
if (!_urlMatchPattern.test(url))
return new Array();
var urlMatches = url.match(_urlMatchPattern);
if (urlMatches != null)
{
Logger.log("Count:" + Math.floor(urlMatches.length));
for (var i=0; i<Math.floor(urlMatches.length);i++)
Logger.log("Position " + i + ": " + urlMatches[i]);
}
return urlMatches;
}
当我通过运行代码测试它时,输出是包含填充字符串的单个数组元素。但是,通过正则表达式测试工具(例如http://gskinner.com/RegExr/或www.regexplanet.com/advanced/java/)提供相同的信息可以提供正确的信息。
感谢任何帮助/建议/有礼貌地指出我不可避免的愚蠢错误。
谢谢,Jonny
答案 0 :(得分:1)
要解决此问题,您必须从正则表达式中删除/g
修饰符,即该行应为
const _urlMatchPattern = /^((http[s]?):\/)?\/?([^:\/\s]+)(:([^\/]*))?((\/\w+)*\/)([\w\-\.]+[^#?\s]+)(\?([^#]*))?(#(.*))?$/mi;