2013-09-26 6 views
1

настоящее время я использую следующие преобразовать [url=][/url] в ссылке HTML:Javascript HTTP регулярное выражение

s = message.replace(/\[url=([^\]]+)\]\s*(.*?)\s*\[\/url\]/gi, "<a href='$1'>$2</a>") 

что мелкие произведения.

Затем я добавил на другую функцию замены, используя регулярное выражение для замены www с http://www так:

s = message.replace(/\[url=([^\]]+)\]\s*(.*?)\s*\[\/url\]/gi, "<a href='$1'>$2</a>") 
.replace(/www/g, "http://www"); 

Это, вероятно, не самый лучший/эффективный метод, а также не поддерживает https://, которая не является приоритетом момент, но это то, что я хотел бы включить в какой-то момент. Может кто-нибудь, пожалуйста, посоветуйте мне, что я могу сделать, чтобы улучшить регулярное выражение?

+0

Это не очень подходит для формата вопрос/ответ. - Он слишком широк. «Есть слишком много возможных ответов, или хорошие ответы будут слишком длинными для этого формата» – FrankieTheKneeMan

+0

@FrankieTheKneeMan - Я вижу, откуда вы. Я не склонен задавать вопросы в этой усадьбе, однако было бы полезно знать, почему метод, который я использую, не является хорошим и какие улучшения могут быть сделаны. Я не слишком уверен, что это еще не все:/ – Lodder

+1

Проблема не в том, о чем вы спрашиваете, это о чем вы спрашиваете. У вас нет конкретной проблемы, у вас есть регулярное выражение, которое вы хотели бы «улучшить» - это очень субъективный термин. Даже если вы определили метрику, по которой вы можете измерить такое улучшение, слишком много способов улучшить какую-либо конкретную метрику, часто включающую компромиссы в разных других показателях. Если у вас есть определенная проблема с регулярным выражением (если оно не соответствует правильно или неправильно заменяет), мы можем вам помочь, и тот, кто решает проблему, может получить кредит. В противном случае, вы преуспеваете. – FrankieTheKneeMan

ответ

1

Пара вещей:

Во-первых, есть некоторые проблемы с вашим вторым рисунком. Он не чувствителен к регистру (тогда как первый шаблон), поэтому он не будет захватывать такие вещи, как «WWW». Может быть, это желательно, может быть, и нет. Но он также глобальный и не привязан к началу URL-адреса. Таким образом, он заменит www в любом месте URL. Изменение этого на что-то вроде /href=\'www/, а затем изменение строки замены на href='http://www должно решить эти проблемы.

Во-вторых, в таком случае использование двух регулярных выражений может быть не так. Вы можете свернуть его в одно регулярное выражение, если хотите, но это не значит, что он более эффективен для компьютера или бедного человека, который, по-видимому, его читает.

Все, что сказал, один из способов достижения этой цели с помощью одного регулярного выражения, чтобы сделать что-то вроде:

s = message.replace(/\[url=(?:http:\/\/)?([^\]]+)\]\s*(.*?)\s*\[\/url\]/gi, "<a href='http://$1'>$2</a>") 

Это может выполнить то, что вы хотите. Он не отключает «www», но он просто добавляет «http: //» к любому URL-адресу, который еще не начинается с этой строки. Он также не поддерживает https, как вы упомянули, но я не уверен, как вы все равно это поддержите. Если все, что вам дано, это URL без протокола, как вы определяете, нужно ли это делать https?

+0

Спасибо за информацию и регулярное выражение. Это именно то, что мне нужно :) – Lodder

+1

Для поддержки прохождения через HTTPS вы можете использовать '\ [url = (?: http (s?): \/\ /)? ([^ \]] +) \] \ S * (. *?) \ s * \ [\/url \]/gi' и заменить на "$3". Тогда, по крайней мере, все HTTPS-ссылки останутся HTTPS, и все HTTP-ссылки будут HTTP. Неопределенные ссылки будут делать то, что сделает браузер, и принять HTTP. – FrankieTheKneeMan

+0

Вау, большое спасибо.очень ценится – Lodder

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