我有一些人们没有添加协议的链接。即,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.');
}
答案 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
)。