Well, I'm not an expert with regex.
My problem is simple, Im trying to match some escape characters from a string which have this format (It is a string before I parse it to a DOM)
<info type="map" name="Double quotes test name" author="Escape < character"></info>
<info type="map" name='Test name with single quotes' author='Escape < character'></info>
As you can see, there are 2 types of properties that I'm trying to match, these are name and author.
I want to convert <
character to <
, however, my patter is not matching properly.
My pattern currently match the whole attribute value. It even matches attributes which aren't author or name.
/(?!author|name\s*=\s*)(?:\'[^']*\')/g
I hope you can bring me a hand with this, thanks for reading and best regards.
CodePudding user response:
You can try matching all <
that are not preceeded by either newline, start of string or >
:
(?<=[^\n>])<
Check the demo here.
If you want to make sure the <
is found within the value of either the name or author attribute, you can use:
(?<=(?:author|name)=(?:"[^<"] ?|'[^<'] ?))<
where the <
is preceeded by:
(?:author|name)
: either "author" or "name" keyword=
: equals(?:"[^<"] ?|'[^<'] ?)
:"[^<"] ?
: a"
followed by least amount of characters which don't include"
and<
|
: or'[^<'] ?
: a'
followed by least amount of characters which don't include'
and<
Check the demo here.