给定一个输入字段,我试图使用正则表达式查找文本字段中的所有URL并使其成为链接。但是,我希望保留所有信息。
例如,我输入" http://google.com你好,这是我的内容" - >我希望通过白色空格将此正则表达式模式从另一个堆栈溢出问题(regexp = /(ftp | http | https)://(\ w +:{0,1} \ w * @)?)分开。(\ S + )(:[0-9] +)?(/ | /([\ w#!:。?+ =&%@! - /]))?/)这样我最终会得到一个[& #39; http://google.com','你好,这是我的内容']。
另一个例子:"你好,这是我的内容http://yahoo.com测试测试http://google.com" - > arr of ['你好这是我的内容',' http://yahoo.com','测试测试',' http://google.com& #39]
如何做到这一点?非常感谢任何帮助!
答案 0 :(得分:1)
首先将正则表达式中的所有组转换为非捕获组((?:...)
),然后将整个正则表达式包装在一个组中,然后使用它来拆分字符串,如下所示:
var regex = /((?:ftp|http|https):\/\/(?:\w+:{0,1}\w*@)?(?:\S+)(?::[0-9]+)?(?:\/|\/(?:[\w#!:.?+=&%@!-/]))?)/;
var result = str.split(regex);
示例:强>
var str = "hello this is my content http://yahoo.com testing testing http://google.com";
var regex = /((?:ftp|http|https):\/\/(?:\w+:{0,1}\w*@)?(?:\S+)(?::[0-9]+)?(?:\/|\/(?:[\w#!:.?+=&%@!-/]))?)/;
var result = str.split(regex);
console.log(result);
答案 1 :(得分:1)
您的RegExp
中没有未转义的反斜杠。
var str = "hello this is my content http://yahoo.com testing testing http://google.com";
var captured = str.match(/(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!-/]))?/g);
var nonCaptured = [];
str.split(' ').map((v,i) => captured.indexOf(v) == -1 ? nonCaptured.push(v) : null);
console.log(nonCaptured, captured);