2017-02-20 159 views
1

给定一个输入字段,我试图使用正则表达式来查找文本字段中的所有URL并使它们成为链接。但是,我希望保留所有信息。所以例如,我有一个输入“http://google.com你好,这是我的内容” - >我想分割的空白后这个正则表达式模式从另一个堆栈溢出问题(regexp = /(ftp | http | https://(\ w +:{0,1} \ w * @)?(\ S +)(:[0-9] +)?(/ | /([\ w#!:。?+ = & %@! - /]))?/),这样我就会得到一个['http://google.com','你好,这是我的内容']。JavaScript正则表达式 - 通过正则表达式模式将字符串分割成数组

另一个前:“您好,这是我的内容http://yahoo.com测试测试http://google.com” - >改编的[“您好,这是我的内容”,“http://yahoo.com”,“测试的测试”,“http://google.com”]

哪有这样做?任何帮助深表感谢!

+0

'(FTP | HTTP | HTTPS):// \ S +'是足以让URL部分 –

回答

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

+0

谢谢!在使用您提供的正则表达式之后,我最终定制了它。感谢您的帮助@ibrahimmahrir – Tonyhliu

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

+0

所以这适用于我想要的url链接,但我也想捕获非正则表达式内容(即“你好,这是我的内容”)到一个单独的数组 – Tonyhliu

+0

忘记标记你:) @ kinduser – Tonyhliu

+0

@Tonyhliu完成了。 –