简单的面包屑与正则表达式
我正试图通过分割一个给定的URL来创建一个简单的面包屑和正则表达式:
输入是这种形式的网址 - http://someurl.com:1000/sites/Site1/Pages/Programs/Programs1/Programs2/SomePage.aspx?a=b;c=d
输出预计是 - 您在这里:网站> Site1> Pages> Programs> Programs1> Programs2> SomePage
这里是我使用的代码:
<script type="text/javascript">
var url ="http://someurl:1000/sites/Site1/Pages/Programs/Programs1/Programs2/SomePage.aspx?a=b;c=d"
var newURL = url.replace(new RegExp( "^(?:([^:/?#]+):)?(?://((?:(([^:@]*):?([^:@]*))?@)?([^:/?#]*)(?::(d*))?))?((((?:[^?#/]*/)*)([^?#]*))(?:?([^#]*))?(?:#(.*))?)", "g"),
function( $0, $1, $2, $3, $4, $5, $6, $7, $8, $9){
var domain = $1+ "://" + $2;
var href = domain;
var urlStrippedDown = $9;
//Split the folders/pages within the path /sites/Site1/Pages/Programs/Programs1/Programs2/SomePage.aspx
var pieces = urlStrippedDown.replace( new RegExp (w+.aspx)|(w+),
//Form the bread crumb with anchor tags and text
function ($0, $1, $2)
{
zero = $0;
var test = "<a href='" + href + urlStrippedDown.substring(0,urlStrippedDown.indexOf($0)+$0.length) +"'>" + zero.replace('.aspx','') + "</a>";
return test;
}
);
return pieces;
}
);
//document.write("You are here: " + newURL.replace(///g,''));
document.write("You are here: " + newURL);
</script>
面临的问题:我面临的唯一问题是最终输出(newURL)在每个链接之间都有一个正斜杠(“/”),我想用“>”替换,但这似乎是不可能的。 我不确定这个“/”是如何插入的,尽管当“anchor”标签形成时它并没有将它显示为文本的一部分。
预期的输出是 - 你在这里:sites> Site1> Pages> Programs> Programs1> Programs2> SomePage
而我得到 - 你在这里:/ sites / Site1 / Pages / Programs / Programs1 / Programs2 / SomePage,我无法用“>”替换这个“/”
PS:注释的代码行 - 如果我在这里替换,它会替换所有的“/”,甚至是锚标签中的那些。 应该在文本中而不是在锚的href中替换“/”
正则表达式中有缺陷吗? 有更好的方法来处理这个问题吗?
谢谢!
你的第一个替换实际上并没有任何其他目的,除了将字符串拆分成部分:域和路径之外,你应该考虑在字符串上使用RegExp.exec
并以这种方式获取部分(参见下面的代码片段)。
你的newURL
变量包含html,你可以在你的正则表达式中使用它。 如果您将所有/<a
替换为> <a
> <a
你应该有一个字符串作为> sites > Site1 > Pages > Programs > Programs1 > Programs2 > SomePage
。 然后你将不得不删除第一个>
因为我可以想象你不想这样做。
你的正则表达式似乎过于复杂,你需要为你的第一场比赛,你的第二个替代你可能会更好地使用indexOf('/')
和循环,因为你没有真正利用正则表达式匹配。
在下面,您将找到一个函数,使用与初始解决方案类似的方法为任意有效的URI创建所需的链接链。 由于修改了你的代码,我得到了这个结果,所以这似乎是一个浪费,不要发布它。
var url = "http://someurl:1000/sites/Site1/Pages/Programs/Programs1/Programs2/SomePage.aspx?a=b;c=d";
function makeBreadcrumb(url){
// Split match and split url into domain and path.
var urlSplitter = new RegExp("^(.*?://[^/]+?/)([^?#:@]*)", "");
var matcher;
if (matcher = urlSplitter.exec(url)) {
var domain = matcher[1];
// Match every "folder" or "file" in the URI and replace with "breadcrumb link".
return matcher[2].replace(new RegExp("([^/]+)(?:.[^.]+$|/)","g"),
function(match,dir,pos,string) {
return (pos > 0 ? " > " : "") + "<a href="" + domain + string.substring(0,pos) + match + "">" + dir + "</a>";
}
);
}
return "";
}
document.write("You are here: " + makeBreadcrumb(url));
尝试这种模式,它会根据您的要求选择所有您的“”符号替换它们
(/)(?=[^/:]*(/|$))(?=[^/])
(/)(?= [^ /:] *(/ | $))仅当“/”后跟除“/”以外的所有字符时才匹配“/”,下一个以“/”结尾或结尾
链接地址: http://www.djcxy.com/p/39087.html