2016-05-06 4 views
1

Я не лучший из регулярных выражений и нуждаюсь в некоторой помощи.Регулярное выражение Javascript - Соответствие 2 подстрок

У меня есть такие строки: data-some-thing = "5 10 red". Слово «данные-некоторые» постоянно и «вещь» изменяется. «вещь» также может содержать тире. Значения в двойных кавычках содержат только буквенно-цифровые символы или пробелы.

Возможно ли получить «вещь» и значения в двойных кавычках, используя только регулярное выражение? Если да, то какое выражение следует использовать? Я пробовал использовать lookarounds, но не имел большого успеха.

+0

Очевидно, что (?) Это атрибут данных для элемента HTML. Почему вы пытаетесь сделать что-либо с регулярным выражением в HTML? Вместо этого выполните поиск по атрибутам элемента (ов) HTML (или на 'elt.dataset') для тех, которые имеют правильную форму, тогда вы можете напрямую получить значение атрибута. –

+0

Я бы сделал это, но я разбираю строку, используя узел, а не документ в браузере. Извините за то, что вы не совсем поняли это :) – Thinch

+1

Это не меняет того факта, что вы не должны анализировать HTML с помощью JS. При необходимости используйте пакет DOM для узла. –

ответ

3

Вы могли бы использовать:

var result = data.match(/data-some-(.*?)="(.*?)"/); 

Массив результат будет иметь три элемента:

  • 0: полный матч (не вашего интереса)
  • 1: переменную часть перед знак равенства
  • 2: значение между кавычками.

Демо:

var data = 'data-some-thing="5 10 red"'; 
 
var result = data.match(/data-some-(.*?)="(.*?)"/); 
 

 
document.write(result[1] + '<br>' + result[2]);

Отказ от ответственности:

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

Для node.js вы можете использовать npm модули jsdom и htmlparser, чтобы сделать это ,

+0

Я понимаю точку и звезду, но не могли бы вы объяснить мне, как здесь работает знак вопроса? Спасибо за ответ. Собираюсь отметить это, как только смогу :) – Thinch

+0

Вопросительный знак влияет на предыдущую звезду. Он превращает его из жадного в ленивую звезду. Практически это означает, что, как только регулярное выражение может продвигаться вперед и соответствовать шаблону, который следует за ним, он сделает это (ленивый). Без знака вопроса следующие данные будут разбиты неверным образом: 'data-some-thing =" 5 10 red "; некоторые другие вещи = «hallo». – trincot

+0

В качестве тривиального примера тщетности попыток разбора HTML с помощью регулярного выражения это не удастся, если значение атрибута одно кавычки. Это не удастся, если есть пробелы по обе стороны от знака равенства. Он будет терпеть неудачу с вводом формы 'xxx-data-some-thing'. И т.д. и т. Д. Не анализируйте HTML с регулярным выражением. –

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