1

特定の URL を分割して、正規表現を使用して簡単なパンくずリストを作成しようとしています。

入力は、この形式の URL です - http://someurl.com:1000/sites/Site1/Pages/Programs/Programs1/Programs2/SomePage.aspx?a=b;c=d

期待される出力は - 現在地: サイト>サイト 1>ページ>プログラム>プログラム 1>プログラム 2>サムページ

そして、ここに私が使用したコードがあります:

<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) の各リンクの間にスラッシュ ("/") があることです。それを ">" に置き換えたいのですが、これは不可能のようです。この「/」がどのように挿入されるのかはわかりませんが、「アンカー」タグが形成されたときにテキストの一部として表示されません。

期待される出力は次のとおりです。

一方、私は取得します-あなたはここにいます:/sites/Site1/Pages/Programs/Programs1/Programs2/SomePageで、この「/」を「>」に置き換えることができません

PS: コードのコメント行 - ここを置き換えると、アンカー タグ内の "/" もすべて置き換えられます。「/」は、アンカーの href ではなく、テキストで置き換える必要があります

正規表現に欠陥はありますか? これを処理するより良い方法はありますか?

ありがとう!

4

2 に答える 2

0

最初の置換は、文字列をドメインとパスの部分に分割する以外の目的にはまったく役立ちません。代わりRegExp.execに、文字列での使用を検討し、そのように部分を取得する必要があります (以下のスニペットを参照)。

変数newURLには、正規表現で利用して使用できる html が含まれています。/<aallを次のように置き換えると&gt; <a、文字列が次のようになります> sites > Site1 > Pages > Programs > Programs1 > Programs2 > SomePage。そして、最初のものを削除する必要が>あると思いますが、それは望ましくないと思います。

あなたの正規表現は、最初の一致に必要なものに対して非常に複雑に思えます.2番目の置換indexOf('/')では、正規表現の一致を実際に活用していないため、代わりに and ループを使用する方がよい場合があります。

以下に、最初のソリューションと同様のアプローチを使用して、任意の有効な 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));
于 2013-04-05T10:37:25.787 に答える
0

このパターンを試して、すべての「\」記号を選択して、必要に応じてそれらを置き換えます

(\/)(?=[^\/:]*(\/|$))(?=[^\/])

(/)(?=[^/:]*(/|$)) 「/」の後に「/」以外のすべての文字が続く場合にのみ「/」に一致し、次の末尾が「/」または行末

于 2013-04-05T05:26:35.390 に答える