JavaScript Regex - 通过Regex模式将字符串拆分为数组

时间:2017-02-20 23:49:07

标签: javascript regex

给定一个输入字段,我试图使用正则表达式查找文本字段中的所有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]

如何做到这一点?非常感谢任何帮助!

2 个答案:

答案 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);