2017-02-20 9 views
1

入力フィールドを指定すると、正規表現を使用してテキストフィールド内のすべてのURLを見つけてリンクします。しかし、私はすべての情報を保持したい。JavaScript Regex - 文字列を正規表現パターンで配列に分割する

たとえば、私は "http://google.comこんにちはこれは私のコンテンツです"という入力を持っています - >別のスタックオーバーフローの質問からこの正規表現のパターンの後に白いスペースで分割したいと思います(regexp = /(ftp | http | https)://(\ w +:{0,1} \ w * @)?(\ S +)(:[0-9] +)?(/ | /!:??+ = &私は['http://google.com'、 'こんにちはこれは私のコンテンツです']の配列に終わるように、%@! - /])?

もう一つの例: "こんにちは、これは私のコンテンツhttp://yahoo.comテストテストhttp://google.comである" - >のARRは

どのように[ '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されています。 –

関連する問題