Возможно ли обратное использование регулярных выражений в классе символов? - PullRequest
0 голосов
/ 16 февраля 2010

Поддерживают ли регулярные выражения javascript обратные ссылки внутри класса символов?

Я хочу сделать что-то вроде этого:

htmlString.replace(/attribute_name=(['"])[^\1]*\1/,'')

Но это не работает. Это делает:

htmlString.replace(/attribute_name=(['"])[^'"]*\1/,'')

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

<div attribute_name="John's car" class="someClass"></div>
<div attribute_name='some &quot;quoted text&quot;' class="someClass"></div>

Я не могу предсказать, какой из "или" будет использоваться вокруг атрибута.

Как избавиться от атрибута и оставить атрибут класса в покое (не вырезать слишком много)?

Контекст: Я получаю HTML по $ ('templateContainer'). InnerHTML. Я должен изменить этот HTML, прежде чем вставить его на страницу снова. Я должен вырезать некоторые нестандартные атрибуты и все атрибуты ID.

Ответы [ 2 ]

3 голосов
/ 19 февраля 2011

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

Обычно я пытаюсь использовать объект javascript для хранения своих данных, а затем ссылаться на них, используя правильно сформированные ключи и т. Д. пожимает плечами Это больше работа, но она чище ИМХО.Но, безусловно, это не единственный способ выполнить задачу.

Что касается вашего вопроса, вы также можете использовать не жадное сопоставление в JavaScript, и это будет выглядеть так:

htmlString.replace(/ ?attribute_name=(['"]).*?\1/, '')

Регулярные выражения в JavaScript |evolt.org

1 голос
/ 16 февраля 2010

Было бы намного лучше, если бы вы использовали DOM или какую-то другую модель, разработанную для иерархического контента. Тем не менее, если вы должны использовать регулярные выражения, самый простой способ, вероятно, будет просто использовать вместо | (ИЛИ).

htmlString.replace(/attribute_name=('[^']*'|"[^"]*")/,'')
...