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

Самый простой способ удалить внутренние элементы html и вернуть только текст будет Функция JQuery .text () .

Пример:

var text = $('

A nice house was found in Toronto

'); alert( text.html() ); //Outputs A nice house was found in Toronto alert( text.text() ); ////Outputs A nice house was found in Toronto

jsFiddle Demo

30
задан brian d foy 29 December 2008 в 23:39
поделиться

8 ответов

Необходимо использовать номер один, потому что номер два является плохой практикой. Полагайте, что разработчик, который приезжает после Вас, хочет к строкам совпадения, которые сопровождаются восклицательным знаком. Если он использует:

"[^"]*"!

или:

".*?"!

различие появляется, когда у Вас есть предмет:

"one" "two"!

первые соответствия regex:

"two"!

, в то время как второй regex соответствует:

"one" "two"!

Всегда быть столь конкретным, как Вы можете. Используйте отрицаемый класс символов, когда Вы будете мочь.

Другое различие - то, что [^ "]* может охватить через строки, в то время как.* не делает, если Вы не используете однострочный режим. [^ "\n] * исключает разрывы строки также.

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

38
ответ дан Etienne Neveu 30 December 2008 в 09:39
поделиться
  • 1
    @YuriyRomanenko, спасибо, у меня есть не много для добавления здесь (хотя, обновленный), все еще предлагая попробовать привязку потока набора если Вы don' t хотят взломать ядро. – Anton 1 June 2014 в 10:31

Я предложил бы:

([\"'])(?:\\\1|.)*?\1

, Но только потому, что это обрабатывает оставленные символы кавычки и позволяет и 'и "быть символом кавычки. Я также предложил бы смотреть на эту статью, которая входит в эту проблему подробно:

http://blog.stevenlevithan.com/archives/match-quoted-string

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

/".*?"/

я должен признать, что нежадные шаблоны не являются основным регулярным выражением 'редактора' стиля Unix, но они становятся довольно распространенными. Я все еще не привык к операторам группы как (?: материал).

10
ответ дан Harold Bamford 30 December 2008 в 09:39
поделиться
  • 1
    @YuriyRomanenko, я вижу, тогда он походит больше на преднамеренное решение (попробуйте ядро RT? некоторые взгляды патчей очень близко), или логическая мисс, так как IPI здесь, кажется, или единственное решение или по крайней мере более эффективный от повторного использования кэша и точек зрения использования ресурса, чем, например, возобновления потока на CPU0 вместо этого. – Anton 1 June 2014 в 18:49

Я сказал бы, что второй лучше, потому что он перестал работать быстрее, когда завершение " отсутствует. Первый отследит в обратном порядке по строке, потенциально дорогой операции. Альтернатива regexp при использовании жемчуга 5.10, была бы /"[^"]++"/. Это передает то же значение, как версия 1 делает, но с такой скоростью, как версия два.

6
ответ дан Leon Timmermans 30 December 2008 в 09:39
поделиться
  • 1
    @YuriyRomanenko, разъясните то, что Вы на самом деле хотите в этой точке, прикрепить ядро или к обходному решению его поведение? – Anton 1 June 2014 в 18:52

Я пошел бы для номера два, так как намного легче читать. Но я все еще хотел бы соответствовать пустым строкам, таким образом, я буду использовать:

/".*?"/
4
ответ дан PEZ 30 December 2008 в 09:39
поделиться

С точки зрения производительности (чрезвычайно тяжелый, продолжительный цикл по длинным строкам), я мог предположить, что

"[^"]*"

быстрее, чем

".*?"

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

, Поскольку я сказал в реальных сценариях, это едва будет примечательно. Поэтому я пошел бы с номером два (если моя текущая regex разновидность поддерживает его, который является), потому что это намного более читаемо. Иначе с номером один, конечно.

2
ответ дан Tomalak 30 December 2008 в 09:39
поделиться
  • 1
    Can' t оставляют их незаполненный, потому что мы создаем VPC с подсетями в каждом AZ - проблемой не является каждый AZ, который возвращается, позволяет подсети! – chris 30 January 2014 в 09:11

Я предпочитаю первый regex, но это - конечно, вопрос вкуса.

первый мог бы быть более эффективным?

Search for double-quote
add double-quote to group
for each char:
    if double-quote:
        break
    add to group
add double-quote to group

По сравнению с чем-то немного более сложное отслеживание в обратном порядке вовлечения?

0
ответ дан Douglas Leeder 30 December 2008 в 09:39
поделиться
  • 1
    Это - ручной процесс - Если я создаю подсети на основе Fn:: Выбор с помощью индекса 0, 1 и 2, который это будет иногда приводить к сбою, потому что существует на самом деле 4 AZS, но не каждые из них, позволяет подсети – chris 1 February 2014 в 07:02

Рассмотрение, что я даже не знал о "*?" вещь до сих пор, и я использовал регулярные выражения для 20 + годы, я проголосовал бы за первое. Это, конечно, проясняет, что Вы пытаетесь сделать - Вы пытаетесь соответствовать строке, которая не включает кавычки.

0
ответ дан Paul Tomblin 30 December 2008 в 09:39
поделиться
  • 1
    Можно предоставить его список AZS вместо того, чтобы использовать Fn:: GetAZs. Если Вы хотите сделать 3 различных подсети, то определите 3 отличных ресурса стека каждая ссылающаяся определенная зона. – Arya 4 February 2014 в 06:19

Используя отрицаемый класс символов предотвращает соответствие, когда граничный символ (doublequotes, в Вашем примере) присутствует в другом месте во входе.

Ваш пример № 1:

/"[^"]+"/ # match quote, then everything that's not a quote, then a quote

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

К счастью Damian Conway готов со спасением: текст:: Сбалансированный там для Вас, если Вы находите, что существует несколько подобранных меток кавычки. Это также имеет достоинство соответствия другой парной пунктуации, например, круглым скобкам.

1
ответ дан Trochee 30 December 2008 в 09:39
поделиться
  • 1
    Таким образом, если одна зона не позволяет подсети VPC, какой смысл того, чтобы использовать ее она Вы размещаете в VPC? Просто проигнорируйте ту зону и соглашение с 3 зонами, которые поддерживают его. – Arya 1 February 2014 в 01:03
Другие вопросы по тегам:

Похожие вопросы: