2013-02-26 4 views
1

Я довольно незнакомый с RegExp, и я пытаюсь реализовать его для обнаружения URL-адресов в строках. Один регулярное выражение, я хочу использовать это один (пожалуйста, не предоставляйте свои собственные):не удалось проверить регулярное выражение в javascript

/(((http|ftp|https)://)?[\w-]+(\.[\w-]+)+([\w.,@?^=%&:/~+#-]*[\[email protected]?^=%&/~+#-])?)/g 

И заменить все матчи с этим:

<a href="$1">$1</a> 

Если вы посещаете http://gskinner.com/RegExr/ с этим примером и используйте его в замене, вы увидите, что он работает безупречно, но невозможно построить рабочее решение с этим в javascript.

var text = "hi, demo link http://stackoverflow.com is a great website" 
//regexp magic 


//expected result: 
textWithLink ="hi, demo link <a href="http://stackoverflow.com">http://stackoverflow.com</a> is a great website" 
+1

Как вы попытались выразить это регулярное выражение в синтаксисе JS? Как вы попытались использовать результирующий объект? – Quentin

+1

@ Невозможно убрать косые черты в регулярном выражении –

+0

@JanDvorak Хм, я предположил, что это не было необходимо, когда вы делаете «var re = new RegExp ('(((http | ftp | https): //)? [\ w -] + (\. [\ w -] +) + ([\ w., @?^=% &:/~ + # -] * [\ w @?^=% &/~ + # -])?) ',' g '); ' –

ответ

2
var str = 'hi, demo link http://stackoverflow.com is a great website', 
    regex = /(((http|ftp|https):\/\/)?[\w-]+(\.[\w-]+)+([\w.,@?^=%&amp;:\/~+#-]*[\[email protected]?^=%&amp;\/~+#-])?)/g; 
str.replace(regex, '<a href="$1">$1</a>'); 

Примечание: Это ваше точное регулярное выражение, я просто избежал косых черт.

+0

Спасибо всем, теперь я понимаю гораздо лучше, как использовать регулярное выражение в js. Удивительный! – monxas

1

Вы можете сделать это

var ok = /(((http|ftp|https):\/\/)?[\w-]+(\.[\w-]+)+([\w.,@?^=%&amp;:/~+#-]*[\[email protected]?^=%&amp;/~+#-])?)/.test(str); 

, чтобы проверить, если строка является URL.

Если вы хотите посмотреть на URL-адреса в строке, используйте

var matches = str.match(/(((http|ftp|https):\/\/)?[\w-]+(\.[\w-]+)+([\w.,@?^=%&amp;:/~+#-]*[\[email protected]?^=%&amp;/~+#-])?)/g); 

Обратите внимание, что это regex literal и что я должен был избежать /.

+0

@JanDvorak Я уже ответил на свой вопрос, я удалю свои комментарии. – 11684

1

RegExp буквальным вы предоставите недействительно:

/(((http|ftp|https)://)?[\w-]+(\.[\w-]+)+([\w.,@?^=%&amp;:/~+#-]*[\[email protected]?^=%&amp;/~+#-])?)/g 
^     ^^ 
Start    |\__ Error 
        | 
        End 

Он работает в ссылке, которую Вы предоставляете, потому что полоски приложений разделители автоматически и непреднамеренно исправляет ошибку.

Смежные вопросы