1

URLを検索して特定のドメイン名を検索し、URLの最後にいくつかのパラメーターを追加するスクリプトがあります。ただし、複数回実行すると、同じURLに重複するパラメーターが追加されます。URLにすでにパラメータが含まれているかどうかを確認することはできますか?

JSFiddle

元のstackoverflowの投稿

変更されるコード

<div id="wp-content-editor-container" class="wp-editor-container"><textarea class="wp-editor-area" rows="10" tabindex="1" cols="40" name="content" id="content">&lt;a title="Link to test domain" href="http://www.domain.com"&gt;Link to google&lt;/a&gt;
&lt;a href="http://google.com/directory/subdirectory/index.html"&gt;This is another link&lt;/a&gt;
&lt;a href="http://domain.com/directory/index.html"&gt;This is a 3rd link&lt;/a&gt;

&lt;a href="http://www.domain.com/subdir?parameter"&gt;this url already has parameters&lt;/a&gt;</textarea></div>

jqueryスクリプト

var url = 'www.domain.com';
var append = '?parameter';

$(".wp-editor-area").each(function() {
    $(this).text(urlify($(this).text()));
});

function urlify(text) {
    var urlRegex = /(\b(https?|ftp|file):\/\/[www.domain.com][-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/ig;
    return text.replace(urlRegex, function(url) {
        return url + append;
    })
}

現在の出力

<a title="Link to test domain" href="http://www.domain.com?parameter">Link to google</a>
<a href="http://google.com/directory/subdirectory/index.html">This is another link</a>
<a href="http://domain.com/directory/index.html?parameter">This is a 3rd link</a>

<a href="http://www.domain.com/subdir?parameter?parameter">this url already has parameters</a>

理想的な出力では、URLの最後に2番目の「?parameter」が追加されません^

ありがとう!

4

1 に答える 1

2

indexOfを使用して、追加しようとしているものがURLにすでに含まれているかどうかを確認できると思います。

  function urlify(text) {
                var urlRegex = '/(\b(https?|ftp|file):\/\/[www.domain.com][-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/ig';
                return text.replace(urlRegex, function (url) {
                    // if the url does not contain append, concat append to the URL
                    if (url.indexOf(append) == -1) {
                        return url + append;
                    }
                    return url;
                });
于 2012-07-11T20:41:39.287 に答える