2016-05-12 2 views
0

Мне нужно извлечь содержимое между двумя тегами XML, за исключением тегов.RegEx в JavaScript: контент между двумя тегами

PS: Я не буду использовать это только для анализа XML. Я буду использовать RegEx в JavaScript, поэтому lookbehind не будет работать.

Что я делаю неправильно?

XML:

<location maps=""> 
    RewriteMap map txt:map.txt 
    RewriteMap lower int:tolower 
    RewriteCond %{REQUEST_URI} ^/([^/.]+)\.html$ [NC] 
    RewriteCond ${map:${lower:%1}|NOT_FOUND} !NOT_FOUND 
    RewriteRule .? /index.php?q=${map:${lower:%1}} [NC,L] 
</location> 

RegEx:

/(?:(?=(\<(?!\/)(.*?)\>)))([\s\S]*?)(?=(\<(?=\/)(.*?)\>))/igm 

Результаты:

<location maps=""> 
    RewriteMap map txt:map.txt 
    RewriteMap lower int:tolower 
    RewriteCond %{REQUEST_URI} ^/([^/.]+)\.html$ [NC] 
    RewriteCond ${map:${lower:%1}|NOT_FOUND} !NOT_FOUND 
    RewriteRule .? /index.php?q=${map:${lower:%1}} [NC,L] 

Что я хочу

RewriteMap map txt:map.txt 
RewriteMap lower int:tolower 
RewriteCond %{REQUEST_URI} ^/([^/.]+)\.html$ [NC] 
RewriteCond ${map:${lower:%1}|NOT_FOUND} !NOT_FOUND 
RewriteRule .? /index.php?q=${map:${lower:%1}} [NC,L] 
+0

Там должно быть очень простой и надежный способ, если вы можете использовать любой приличный XML-анализатор, вместо того, чтобы делать это с регулярным выражением; [Почему такая плохая идея анализировать XML с регулярным выражением?] (Http://stackoverflow.com/questions/8577060/why-is-it-such-a-bad-idea-to-parse-xml-with- regex) – har07

+0

На самом деле это всего лишь пример, я буду использовать его для чего угодно, HTML, XML, даже если мне нужно получить контент между двумя «вещами» с несколькими строками. – HovyTech

+0

Какая среда? JS, php, editor ...? – ClasG

ответ

0

Как насчет

<(\w+)[^>]+>\n*([\s\S]*)<\/\1> 

Это будет захватить ваш тег, захватить все до тега повторяется с префиксом /.

Результат в группе захвата 2.

Check it out here at regex101.

+0

Это не совсем то, что я ищу. У меня уже есть фиксированный шаблон JavaScript RegEx, и единственное, что меняется, это RegEx. – HovyTech

+0

Не совсем следуйте ... Вы имеете в виду, что вам нужно использовать матч, а не захватить группы? – ClasG

+0

Шаблон будет проходить через RegEx, который был помещен в него. Шаблон найдет RegEx и заменит его чем-нибудь. Я бы не хотел менять шаблон только для одной опции RegEx, когда у меня есть еще 123 варианта RegEx. Мне нужен RegEx, чтобы просто захватить то, что находится между двумя тегами, за исключением тегов. – HovyTech

1

Вы также можете использовать следующее регулярное выражение: (если имя тега постоянна)

<location[^>]*>([^<]+)</location> 
+0

Это еще результат с тегами в. – HovyTech

+0

Я сделал regex на основе вашего примера. Он работает правильно. –

+1

В JavaScript это не работает. – HovyTech

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