如何查找文本是否包含url字符串
How to find if a text contains url string
如何查找文本是否包含url字符串。我是说如果我有
Sometexthttp://daasddas some text
我想要http://daasddas作为javascript 的链接进行搜索
function replaceURLWithHTMLLinks(text)
{
var exp = /('b(https?|ftp|file):'/'/[-A-Z0-9+&@#'/%?=~_|!:,.;]*[-A-Z0-9+&@#'/%=~_|])/ig;
return text.replace(exp,"<a href='$1'>$1</a>");
}
如果所有给定的URL都已满,则上面的代码效果良好(http://mydomain.com),我在解析URL时遇到问题,比如:
www.mydomain.com
即没有协议。所以我在函数中添加了一些简单的代码:
var exp = /('b(((https?|ftp|file|):'/'/)|www[.])[-A-Z0-9+&@#'/%?=~_|!:,.;]*[-A-Z0-9+&@#'/%=~_|])/ig;
var temp = text.replace(exp,"<a href='"$1'" target='"_blank'">$1</a>");
var result = "";
while (temp.length > 0) {
var pos = temp.indexOf("href='"");
if (pos == -1) {
result += temp;
break;
}
result += temp.substring(0, pos + 6);
temp = temp.substring(pos + 6, temp.length);
if ((temp.indexOf("://") > 8) || (temp.indexOf("://") == -1)) {
result += "http://";
}
}
return result;
如果有人应该找到一个更优化的解决方案来为URL添加默认协议,请告诉我!
您必须使用regex(正则表达式(在文本块中查找URL模式。
以下是相同问题和答案的链接:正则表达式在文本块(Javascript(中查找URL
我调整了dperinis regex url脚本,以便可以找到嵌入字符串中的url。它找不到google.com,如果它是用户输入字段,这是必要的,用户可能会在句号/句号后去掉空白。它还可以找到www.google.com,因为几乎没有人键入协议。
(?:((?:https?|ftp):'/'/)|ww)(?:'S+(?::'S*)?@)?(?:(?!(?:10|127)(?:'.'d{1,3}){3})(?!(?:169'.254|192'.168)(?:'.'d{1,3}){2})(?!172'.(?:1[6-9]|2'd|3[0-1])(?:'.'d{1,3}){2})(?:[1-9]'d?|1'd'd|2[01]'d|22[0-3])(?:'.(?:1?'d{1,2}|2[0-4]'d|25[0-5])){2}(?:'.(?:[1-9]'d?|1'd'd|2[0-4]'d|25[0-4]))|(?:(?:[a-z'u00a1-'uffff0-9]-*)*[a-z'u00a1-'uffff0-9]+)(?:'.(?:[a-z'u00a1-'uffff0-9]-*)*[a-z'u00a1-'uffff0-9]+)*(?:'.(?:[a-z'u00a1-'uffff]{2,}))'.?)(?::'d{2,5})?(?:[/?#]'S*)?
我在www.regextester.com上测试了它,它对我有效,如果你遇到问题,请评论。
您可以使用正则表达式查找URL,并将其替换为前导和尾随标签
许多解决方案开始变得非常复杂,很难在各种情况下使用。下面是我创建的一个函数,用于捕获以http/https/ftp/file/w开头的任何URL。这对我来说很有魅力,它唯一没有添加链接的是用户输入的URL,开头没有http或www(即google.com(。我希望这个解决方案对某人有帮助。
function convertText(txtData) {
var urlRegex =/('b(https?|ftp|file):'/'/[-A-Z0-9+&@#'/%?=~_|!:,.;]*[-A-Z0-9+&@#'/%=~_|])/ig;
txtData = txtData.replace(urlRegex, '<a href="$1">$1</a>');
var urlRegex =/('b('swww).[-A-Z0-9+&@#'/%?=~_|!:,.;]*[-A-Z0-9+&@#'/%=~_|])/ig;
txtData = txtData.replace(urlRegex, ' <a href="$1">$1</a>');
var urlRegex =/(>'swww)/ig;
txtData = txtData.replace(urlRegex, '>www');
var urlRegex =/('"'swww)/ig;
txtData = txtData.replace(urlRegex, '"http://www');
return txtData;
}
function replaceURLWithHTMLLinksHere(text)
{
var exp = /('b(https?|ftp|file):'/'/[-A-Z0-9+&@#'/%?=~_|!:,.;]*[-A-Z0-9+&@#'/%=~_|])/ig;
return text.replace(exp,"<a href='$1'>$1</a>");
}
我们在函数中得到了这个正则表达式。
/(''b(https?|ftp|文件(://[-A-Z0-9+&@#/%?=~|!:,.;]*[-A-Z0-9+&@#/%=~|](/ig
让我们理解这一点。
//正则表达式就是这样开始的。
''b>正在处理https或ftp或唯一的文件,该文件位于字符串的开头。这些关键字在中不应该有任何字符与bbhttps或bbhttp一样,它在其他方面将不匹配。
https?>在这里表示前一个字符或组中的零或一。在这种情况下,s是可选的。
|>匹配给定值中的一个,就像OR一样。
((>创建要匹配的组
/>表示下一个字符是特殊的,不能从字面上解释。例如,前面没有"''"的"b"通常与小写字母匹配b是它们出现的地方。但是'''b'本身与任何字符都不匹配
[]>这是字符类或字符集。它通常有一组字符,一次只出现所有字符中的一个。
[-A-Z0-9+&@#/%?=~_|!:,.;]*>前一元素出现零次或多次。例如,b*c匹配"c"、"bc"、"bbc"answers"bbbc"等。
[-A-Z0-9+&@#/%=~_|]>表示所有字符中的一个。
i>不区分大小写的搜索。g>全局搜索。
function replaceURLWithLinks(text){
var text = "";
text= text.replace(/'r?'n/g, '<br />');
var result = URI.withinString(text, function(url) {
return "<a href='"+url+"' target='_blank'>" + url + "</a>";
});
}
- 此行是否包含函数声明
- 查找对象数组是否包含其中一个标记的最快方法
- 如何使用JQuery检查输入(电子邮件)字段是否包含特殊字符
- 检查数组是否包含
- 在添加或删除之前,正在使用检查classList是否包含类
- 确定数组是否包含偶数
- 如何检查 iframe 中的锚标记是否包含 URL
- 检查选择器在jQuery中是否包含文本(即不是媒体)
- 检查字符串是否包含计算
- 使用 javascript 检查元素是否包含子标记而不是文本
- 使用 Chai - 如何检查对象属性是否包含 DOM 元素
- 测试两个变量是否包含一些数据 JavaScript
- 如何检查列表是否包含 javascript 中的字符串
- immutablejs:查找映射是否包含键值
- 检查上一个(-1&-2)url是否包含字符串
- 如何检查url是否包含多个字符串.Javascript/jquery
- 检查数组是否包含指定的对象
- 如何检查字符串是否包含非英语字符列表
- 检查Javascript是否包含某种方法
- 检查字符串是否包含数组中的某个字符串