2016-12-01 3 views
0

У меня есть длинное XML-сообщение, которое хранится в строковом формате. Образец приведен ниже.Соответствие строки JS с регулярным выражением

<tag1>val</tag><tag2>val</tag2><tagSomeNameXYZ/> 

Я ищу искать эту строку и выяснить, если он содержит пустой тег HTML, такой как <tagSomeNameXYZ/>. Эта вещь, значение SomeName может меняться в зависимости от контекста. Я пробовал использовать Str.match(/tagSomeNameXYZ/g) и Str.match(/<tag.*.XYZ\/>/g), чтобы узнать, содержит ли он именно эту строку, но я могу ее вернуть. У меня возникли проблемы при написании рег ех, что соответствует что-то вроде <tag*XYZ/>, где * собирается быть SomeName (который я не заинтересован в)

Tl; др: Как отфильтровать <tagSomeNameXYZ/> из строки. Формат существо: <constant variableName constant/>

Пример модели, которые он должен соответствовать:

<tagGetIndexXYZ/> 
<tagGetAllIndexXYZ/> 
<tagGetFooterXYZ/> 
+1

Не разобрать XML с регулярным выражением. Разберите его и пройдите DOM или используйте XPath с 'document.evaluate', чтобы найти то, что вы ищете. –

ответ

0

проблемы, которую вы имеете с Str.match(/<tag.*.XYZ\/>/g) это * принимает все, что видит, и не останавливается на XYZ, как вы хотите.. Поэтому вам нужно найти способ остановиться (например, [^/]* означает, что вы держите его, пока не найдете /), а затем оттуда оттуда (slice).

поможет ли это

testString = "<tagGetIndexXYZ/>" 
 
res = testString.match(/<tag([^/]*)\/\>/)[1].slice(0,-3) 
 
console.log(res)

+0

Спасибо. Позвольте мне попробовать. Не могли бы вы вкратце объяснить, что он делает? В частности, часть среза. – blueren

+0

Это удаляет XYZ в конце. Если ваш постоянный в конце был другим, вам нужно было бы изменить -3 на что-то еще. –

+0

Проголосовал ли кто-нибудь, кто голосовал, пожалуйста, лучшее решение, чтобы мы могли все учиться? –

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