Шаблон REGEX для работы с кавычками или без них

У меня есть следующий BBCode, который мне нужно было разобрать

[url=http://www.google.com]Google[/url]
[url="http://www.google.com"]Google[/url]

Я пытаюсь извлечь как http://www.google.com, так и Google.

Теперь разница между двумя частями BBCode выше заключается в кавычках вокруг URL-адреса во втором BBCode.

Возможно ли, чтобы один код регулярного выражения извлекал мои точки данных и учитывал наличие или отсутствие кавычек?

Спасибо!

EDIT: просто для дальнейшего уточнения. В настоящее время я использую следующий шаблон Regex:

/\[URL=\"?([\s\S]*?)\"?\]([\s\S]*?)\[\/URL\]/gi

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


person Mark    schedule 09.03.2012    source источник
comment
Да. Хм, что вы хотите, чтобы регулярное выражение делало? Создать элемент a? Что-то другое? И что вы пробовали?.   -  person David says reinstate Monica    schedule 10.03.2012
comment
То, что вы хотите, возможно, но более эффективно просто удалить все кавычки заранее s/"//g;   -  person vol7ron    schedule 10.03.2012


Ответы (2)


Да:

/\[url=("?)(http://www\.google\.com)\1\](Google)\[\/url\]/

захватит '"' или ''; 'http://www.google.com'; и 'Google'.

(Я понимаю, что на самом деле вам не нужно захватывать '"' или '', но именно так регулярному выражению удается потребовать, чтобы двойные кавычки либо присутствовали, либо отсутствовали. Я также понимаю, что вам, вероятно, нужно охватить другую ссылку- цели и тексты ссылок, помимо вашего примера, но я предполагаю, что вы уже знаете, как с этим справиться, и просто спрашиваете о проблеме с необязательными двойными кавычками?)

person ruakh    schedule 09.03.2012
comment
Вы правы, я могу обработать фактическую часть URL-адреса, мне просто нужно, чтобы регулярное выражение соответствовало шаблону, если URL-адрес имеет кавычки или нет, но если он имеет кавычки, он должен отбросить кавычки. Но ваш шаблон будет соответствовать кавычкам или не будет кавычек, но если есть кавычки, он фактически не отбрасывает кавычки. - person Mark; 10.03.2012
comment
@Марк: я не знаю, что ты имеешь в виду. Вторая группа захвата не будет включать кавычки. Регулярное выражение не может на самом деле отбрасывать вещи. - person ruakh; 10.03.2012
comment
Я предполагаю, что слово «отбросить» неверно, я имею в виду «не включать кавычки в финальное совпадение, *** если они там есть». - person Mark; 10.03.2012
comment
@Mark: Ну, тогда это регулярное выражение действительно отбрасывает кавычки: вторая группа захвата - это просто 'http://www.google.com', а не '"http://www.google.com"'. - person ruakh; 10.03.2012
comment
поэтому я сейчас использую этот окончательный шаблон /[URL=(?)([\s\S]*?)\1]([\s\S]*?)[\/URL]/gi, и он по-прежнему включает в себя вторая группа захвата. Может быть, это проблема с javascript ...? - person Mark; 10.03.2012
comment
@Mark: это регулярное выражение выглядит сломанным, поскольку у вас есть несколько экземпляров [ и ], которые должны быть \[ и \]. Кроме того, ваш подшаблон для URL-адреса настолько общий, что позволяет включать двойные кавычки; например, ваше регулярное выражение считает, что "asefasef"asefasef"asfasef" является допустимым URL-адресом. - person ruakh; 10.03.2012

Чтобы сделать его более общим, вы должны сделать что-то вроде этого:

/\[url=\"?(https?://[^"\]]+)"?\]([^\[]+)\[\/url\]/

который даст вам URL-адрес в \1 и метку в \2

person Bjørne Malmanger    schedule 10.03.2012