Javascript regexp заменить материал, завернутый в кавычки?

Я знаю некоторое базовое регулярное выражение, но вот что. Каждый персонаж будет заключен в пролеты. Я хочу, чтобы вещи, которые были окружены кавычками для замены, так что что-то вроде "something" самом деле было бы

<span>"</span>
<span>s</span>
<span>o</span>
<span>m</span>
<span>e</span>
<span>t</span>
<span>h</span>
<span>i</span>
<span>n</span>
<span>g</span>
<span>"</span>

(Разрыв линии там просто для удобства. Это всего лишь одна длинная строка в реальной вещи.)

Как это сделать:

<span>"</span>
<span>s</span>
<span>o</span>
<span>m</span>
<span>e</span>
<span>t</span>
<span>h</span>
<span>i</span>
<span>n</span>
<span>g</span>
<span>"</span>

? Я использую regexp, потому что это "что-то" может быть чем угодно.

BTW: использование jQuery в коде допускается

Есть еще что-то вроде класса.charachter, который я не хочу добавлять в класс "зеленый", только те, которые заключены в кавычки

4 ответа

Это может работать, в зависимости от сложности вашей страницы:

var quotes = $("span.charachter:contains('\"')");
for (var i = 0; i < quotes.length - 1; i++) {
 quotes.eq(i).nextUntil(quotes.eq(++i)).andSelf().addClass("green");
}

Рабочая демонстрация:http://jsfiddle.net/3SRdD/2/

Это предполагает, что:

  • В span.charachter будет только один символ.
  • У вас никогда не будет непревзойденной цитаты.
  • Следующие братья и сестры span.charachter с цитатой всегда больше элементов span.charachter, по крайней мере до закрытия цитаты.


если ваш шаблон выглядит так: /"(.*)"/ вы должны поставить вопросительный знак ? после звезды *, чтобы сделать ее неровной, например this /"(.*?)"/

также раздел повторной проверки на regular-expressions.info


Простое решение jquery - что-то вроде?

$(".character").addClass("green")


Вы не можете сделать это надежно, потому что "появляется внутри пролета.

Но если вы хотите быть более ограничительным, вы можете искать <span <="" code=""> - но это будет соответствовать только тегам, которые выглядят именно так.</span>

licensed under cc by-sa 3.0 with attribution.