Javascript 用于提取URL部分的正则表达式?
我有一个JavaScript脚本我需要帮助修改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
我希望提取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。但是你的解决方案,在最后一个版本之后也是有效的。