简单的面包屑与正则表达式

我正试图通过分割一个给定的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替换为&gt; <a &gt; <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

上一篇: Simple Bread Crumb with regex

下一篇: I am having problems with my horizontal navigation bar