2016-11-17 2 views
2

У меня есть регулярное выражение, которое проверяет, является ли строка является URL:Как правильно разделить это регулярное выражение на две строки?

const regex = /(http|https):\/\/(\w+:{0,1}\w*)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%!\-\/]))?/ 

Я попытался это:

const regex = '/(http|https):\/\/(\w+:{0,1}\w*)?(\S+)(:[0-9]+)?' + // eslint-disable-line 
'(\/|\/([\w#!:.?+=&%!\-\/]))?/' // eslint-disable-line 

Но регулярное выражение не соответствует больше. То же самое для этого:

const regex = new RegExp(['/(http|https):\/\/(\w+:{0,1}\w*)?(\S+)(:[0-9]+)?', // eslint-disable-line 
'(\/|\/([\w#!:.?+=&%!\-\/]))?/'].join('')) // eslint-disable-line 

Каков правильный способ сделать это?

EDIT:

Пример строки: http://vrcam-10065475.image.myqcloud.com/7a88620cb5ec7eb90164.jpg?imageView2/2/w/600/h/600/q/100/format/jpg

+0

Используйте 'вар регулярное выражение = новый RegExp ([ '(HTTP | HTTPS): // (\\ w +:? \\ w *)? (\\ S +) (: [0-9] +)? ', // eslint-disable-line' и '' (/ |/([\\ w #!:.? + = &%!/-]))? ']. join (' ')) // eslint-disable-line'. Это: двойная обратная косая черта в нотации конструктора и удаление разделителей регулярных выражений. Hyphen перемещается в конец класса символов всегда будет соответствовать буквальной дефис. –

ответ

3

Попробуйте это:

var regex = RegExp(
    "(http|https)://(\\w+:{0,1}\\w*)?(\\S+)(:[0-9]+)?" + 
    "(/|/([\\w#!:.?+=&%!-/]))?" 
); 

Run the sample here

+1

Нет необходимости избегать косой черты в нотации конструктора, '\ /' => '/', и дефис оказывается неизолированным с помощью одного обратного слэша ('' [! \ - \ /] "' равно '/[! - \ /]/', который создает диапазон). –

+0

Регулярное выражение не совпадает. – alex

+0

@alex можете ли вы предоставить образец текста, который вы хотите сопоставить? –