how to search for html-data between specified tags with regex in javascript?

I tried some regular expressions for getting <tag>-data with match so that i get an array of every occurence in the document.. This was one regular expression:


It works great when tested here:

But it generates error: Invalid quantifier
and an arrow points at /(here< at the beginning of the expression,
when tested in javascript with:

var xhtmlArray = responseText.match(/<(?<xhtml>.*).*>(?<text>.*)</\k<xhtml>>/);

This is the source:


		<p class="title_object" id="title_object_1">Titelrad</p>

		<p class="text_object" id="text_object_1">Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed a sem non lectus bibendum tempus. Aliquam tristique ultrices condimentum. Sed sem nisi, suscipit quis elementum vel, pellentesque eget ligula. Cras tristique elit vel nisl fermentum ut consectetur neque consectetur. Nulla vitae nibh non lacus tincidunt aliquam pulvinar quis velit. Vestibulum rhoncus rhoncus nisl ut molestie. Nullam quis sapien laoreet mauris vestibulum mattis at quis lacus. Suspendisse vel lorem non tortor mollis ultricies sit amet vel ante. Aenean massa ligula, aliquet id dapibus at, pellentesque ac nulla. Maecenas at purus nec velit luctus tempor et ut quam. Nam sed justo eros, quis congue ipsum. Mauris volutpat congue dolor non pharetra. Nulla facilisi.</p>


Open in new window

I ONLY want to get the code inside the <xhtml>-tag. And to get it stored in an Array..

What am i doing wrong? I even tried adding /gi after the regex to account for many objects. I feel I still suck on regex. But it's so goood!

// Best regards!
Who is Participating?

[Product update] Infrastructure Analysis Tool is now available with Business Accounts.Learn More

I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

The following expression should extract the content between the xhtml tags.
Note, it returns an array and if it's not empty the first item is the whole string matched (with xhtml tags) and the second is the content.

responseText.match( /<xhtml>(.*)<\/xhtml>/m );
käµfm³d 👽Commented:
My suggestion would be:

var xhtmlArray = responseText.match(/<xhtml[^>]*>((?:[^<]|<(?!\/xhtml>))*)<\/xhtml>/g);

Open in new window

walkman69Author Commented:
kaufmed: Long time no seen, That's quite an expression, what does it do ? Obviously it works, but I don't really get the syntax. zc2, sorry but your solution generated: xhtmlArray is null.
Determine the Perfect Price for Your IT Services

Do you wonder if your IT business is truly profitable or if you should raise your prices? Learn how to calculate your overhead burden with our free interactive tool and use it to determine the right price for your IT services. Download your free eBook now!

käµfm³d 👽Commented:
Greetings  = D

Here's a breakdown:

<xhtml       -  literal text
[^>]*        -  zero or more (*) of any charcter NOT ([^...]) a closing bracket (>)
>            -  literal text
(            -  start of capture group
(?:          -  start of non-capturing group
[^<]         -  any character NOT ([^...]) an opening bracket
|            -  OR
<            -  literal text
(?!\/xhtml>) - NOT followed by [(?! ... )] the literal text "/xhtml>"; forward slash is escaped (\/)
)            - end of non-capturing group
*            - zero or more of the thing to the left; in this case, the entire non-capturing group
)            - end of capture group
<\/xhtml>    - literal text; forward slash is escaped (\/)

Open in new window

walkman69Author Commented:
but doesnt this contradict itself?

[^>]*>  Zero or more characters not a closing bracket, and it must be followed by a closing bracket? Obviously it's not.. but why?
walkman69Author Commented:
ok.. I think i get it.. Zero or more.. it's always that, and then a closing bracket.
Otherwise it doesn't account for <xhtml attributes>
walkman69Author Commented:
But actually i'd rather want only the text inside the <xhtml>.. those could be stripped away..
Is there an easy way to do that with regex? Or do i have to include some string-handling functions?
käµfm³d 👽Commented:
i'd rather want only the text inside the <xhtml>
Sure. This is the reason I used the capture group. You could do something like this:

var pattern = /<xhtml[^>]*>((?:[^<]|<(?!\/xhtml>))*)<\/xhtml>/g;
var xhtmlArray = pattern.exec(responseText);

while (xhtmlArray != null)
    xhtmlArray = pattern.exec(responseText);

Open in new window

Experts Exchange Solution brought to you by

Your issues matter to us.

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Start your 7-day free trial
It's more than this solution.Get answers and train to solve all your tech problems - anytime, anywhere.Try it for free Edge Out The Competitionfor your dream job with proven skills and certifications.Get started today Stand Outas the employee with proven skills.Start learning today for free Move Your Career Forwardwith certification training in the latest technologies.Start your trial today

From novice to tech pro — start learning today.