JS正则表达式匹配(不以[A-z] +://)www开头

时间:2012-01-31 14:54:28

标签: javascript regex regex-negation

我有一些人们没有添加协议的链接。即,www.stackoverflow.com。如果链接以www。开头,我想将其替换为'http:// www。'。

如何使用JavaScript正则表达式执行此操作?

我尝试了下面的代码,但我似乎无法匹配“不以[A-z] +:// www。'开头的模式。”

链接与文本混合在一起。

jQuery(document).ready(function () {       
    jQuery('.myClass').each(function (index) {
        var temp = wwwify(jQuery(this).text());
        jQuery(this).html(temp);
    });
});

function wwwify(text) {
    var regex = /(?!\b([A-z]+:\/\/))www\./igm;
    return text.replace(regex, 'http://www.');
}

6 个答案:

答案 0 :(得分:0)

为什么不使用以下内容?

if (text.substring(0,4)=='www.') {
    text = 'http://'+text;
}

答案 1 :(得分:0)

您需要将正则表达式锚定到字符串的开头。此外,范围必须为/[a-z]/,因为/i修饰符将涵盖大写的可能性。这里的/m/g修饰符无关紧要。离开

var regex = /^(?![a-z]+:\/\/)www\./i;

我道歉,我错过了“链接与文字混合”的部分。如果没有后视,只能使用函数来返回替换字符串。我建议这个,它在 www。之前捕获任何协议,如果它是空白的话,用 http:// 替换它

var regex = /\b([a-z]+:\/\/)?www\./ig;

text.replace(regex, function(url, protocol) {
    return protocol ? url : "http://" + url;
});

答案 2 :(得分:0)

您可以轻松更换每个“http:// www。”到“www。”然后替换所有“www。”到“http:// www。”。它可能不是你能想象的最漂亮的正则表达式,但它会解决你的问题。

$(document).ready(function () {
  $('.myClass').each(function (index) {
    var $elm = $(this); // cache $(this) for reuse
    var html = $elm.html();
    html = html.replace(/http\:\/\/www\./ig, "www.").replace(/www\./ig, "http://www."); ;
    $elm.html(html);
  });
});

答案 3 :(得分:0)

由于我没有通过SO或其他地方找到任何合适的正则表达式解决方案,只需使用常规的javascript替换可能是最好的解决方案。

现在我正在通过文本两次:

function wwwLineBeginsWith(text) { 
    var regex = /^www./gi; 
    return text.replace(regex, 'http://'); 
} 

function wwwWordBeginsWith(text) { 
    var regex = /\swww./gi; return text.replace(regex, 'http://'); 
}

var test1 = 'www.test2.com';
test1 = wwwLineBeginsWith(test1);
test1 = wwwWordBeginsWith(test1);

console.log(wwwWordBeginsWith(test1));

答案 4 :(得分:-1)

如何用协议替换那些?

function wwwify(text) {
    return text.replace(/(http(s?):\/\/)?www\./ig, 'http$2://www.');
}

它目前无法正常工作的原因是因为JavaScript不支持lookbehinds,只支持前瞻。您需要语法(?<!,这在JavaScript正则表达式中不可用。

答案 5 :(得分:-2)

如果您绝对必须使用RegExp来确定这一点,我建议使用/^[^Hh][^Tt]{2}[^Pp]:\/\//之类的东西来进行RegExp。否则,我同意其他海报......使用indexOf会容易得多(即url.toLowerCase().indexOf('http://') !== 0)。