Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 用于提取URL部分的正则表达式?_Javascript_Regex_Url - Fatal编程技术网

Javascript 用于提取URL部分的正则表达式?

Javascript 用于提取URL部分的正则表达式?,javascript,regex,url,Javascript,Regex,Url,我有一个JavaScript脚本我需要帮助修改 我希望提取URL部分并将其设置为html元素的类 var loc = window.location.pathname.match(REGEX_CODE_GOES_HERE); // document.documentElement is the html element, this adds the class if(loc) document.documentElement.className += " " + loc[1].toLowerCa

我有一个JavaScript脚本我需要帮助修改
我希望提取URL部分并将其设置为html元素的类

var loc = window.location.pathname.match(REGEX_CODE_GOES_HERE);
// document.documentElement is the html element, this adds the class
if(loc) document.documentElement.className += " " + loc[1].toLowerCase();
最难的部分是正则表达式;这就是它的工作原理:

示例URL:

http://www.somesite.com/Lists/Pages/ViewPage.aspx?ID=12
应该返回(当然,作为html元素的类):

请随意编辑周围的代码,无论你觉得合适

提前谢谢

类似于

var split=window.location.pathname.split(/\/\?\&=\\./g)

或者,如果您希望所有内容都包含在一个字符串中:

var classes = window.location.pathname.toLowerCase().replace(/\/|\?|&|=|\./g," ")
可能会做你想做的事情

var matches = window.location.pathname.replace(/http:\/\/[^\/]+\//,'').match(/[\w\-\.!~\*\'"(),]+/g);
var split=window.location.pathname.split(/\/\?\&=\\./g)

或者,如果您希望所有内容都包含在一个字符串中:

var classes = window.location.pathname.toLowerCase().replace(/\/|\?|&|=|\./g," ")
我可以做你想做的事

var matches = window.location.pathname.replace(/http:\/\/[^\/]+\//,'').match(/[\w\-\.!~\*\'"(),]+/g);
正则表达式符合RFC 1738

将每个数组元素转换为小写应该是一件小事

var match = url.match(/^(?:([^:/?#]+):)?(?:\/\/([^/?#]*))?([^?#]*)(?:\?([^#]*))?(?:#(.*))?/);
var protocol = match[1],
    domain   = match[2],
    path     = match[3],
    query    = match[4],
    fragment = match[5];
正则表达式符合RFC 1738


将每个数组元素转换为小写应该是一件小事。

您可以使用URL API

var match = url.match(/^(?:([^:/?#]+):)?(?:\/\/([^/?#]*))?([^?#]*)(?:\?([^#]*))?(?:#(.*))?/);
var protocol = match[1],
    domain   = match[2],
    path     = match[3],
    query    = match[4],
    fragment = match[5];

var url=新url(“http://www.somesite.com/Lists/Pages/ViewPage.aspx?ID=12");
var pathnames=url.pathname.split('/');
//路径名=[“”、“列表”、“页面”、“ViewPage.aspx”]
//删除第一个空字符串
shift()路径名;
//路径名=[列表”,“页面”,“ViewPage.aspx”]
//小写:数组中的所有项
pathnames=pathnames.map(i=>i.toLowerCase())
//路径名=[“列表”、“页面”、“viewpage.aspx”]
//抓取文件名后的最后一项
var filename=pathnames.pop();
//filename=“viewpage.aspx”
//路径名=[“列表”,“页面”]
//创建由路径名和文件名组成的css类字符串
var cssClasses=pathnames.concat(filename.split('.').join('');
//现在我们需要获取查询参数
var queryParams=新的URLSearchParams(url.search);
for(queryParams.entries()的常量[key,value]){
cssClasses+=`${key}${value}`;
}

log('cssClasses=',cssClasses);
您可以使用URL API

var url=新url(“http://www.somesite.com/Lists/Pages/ViewPage.aspx?ID=12");
var pathnames=url.pathname.split('/');
//路径名=[“”、“列表”、“页面”、“ViewPage.aspx”]
//删除第一个空字符串
shift()路径名;
//路径名=[列表”,“页面”,“ViewPage.aspx”]
//小写:数组中的所有项
pathnames=pathnames.map(i=>i.toLowerCase())
//路径名=[“列表”、“页面”、“viewpage.aspx”]
//抓取文件名后的最后一项
var filename=pathnames.pop();
//filename=“viewpage.aspx”
//路径名=[“列表”,“页面”]
//创建由路径名和文件名组成的css类字符串
var cssClasses=pathnames.concat(filename.split('.').join('');
//现在我们需要获取查询参数
var queryParams=新的URLSearchParams(url.search);
for(queryParams.entries()的常量[key,value]){
cssClasses+=`${key}${value}`;
}

log('cssClasses=',cssClasses)
如果javascript支持,我建议使用
\W
而不是特定字符。但参数中可能有非单词字符,您不希望被分隔。如果javascript支持,我建议使用
\W
而不是特定字符。但参数中可能有非单词字符,您不希望被分隔请注意,仅此项不起作用。您可以将此解决方案加入到上一个解决方案中,如下所示:var loc=window.location.pathname.replace(/http:\/\/[^\/]+\/,'').split(/\/\\?&=/g)@Alexandre:我建议你在评论它“不会工作”之前先测试一下,抱歉@stillstanding,但我已经在firebug上测试过了,它成功了!我只将“window.location.pathname”替换为给定的示例URL。但是你的解决方案,在最后一个版本之后也是有效的。这仅仅是行不通的。您可以将此解决方案加入到上一个解决方案中,如下所示:var loc=window.location.pathname.replace(/http:\/\/[^\/]+\/,'').split(/\/\\?&=/g)@Alexandre:我建议你在评论它“不会工作”之前先测试一下,抱歉@stillstanding,但我已经在firebug上测试过了,它成功了!我只将“window.location.pathname”替换为给定的示例URL。但是你的解决方案,在最后一个版本之后也是有效的。