У меня есть такая строка:
<span class="cDkSuggestion"></span>
<var class="tSuggestionTag r5">representation</var>
<span class="ib p1 tSuggetionName">for<b>rep</b>resentation</span>
<var class="tSuggestionTag r5">for<b>rep</b>res...</var>
<var class="tSuggestionTag r5">cost of representation</var>
и регулярное выражение
query = query.replace(/<var.*>(.*)<\/var>/gi, "");
результатом этого регулярного выражения является
<span class="cDkSuggestion"></span>
мне нужно
<span class="cDkSuggestion"></span>
<span class="ib p1 tSuggetionName">for<b>rep</b>resentation</span>
Как проверить регулярное выражение, которое не включает другие теги при замене?
Вы действительно должны использовать парсер, но если вы хотите регулярное выражение, сделайте его не жадным:
/<var.*?>(.*?)<\/var>/gi
или, безопаснее:
/<var[^>]*>([^<]*)<\/var>/gi
Если вы знаете, что текст содержит только теги, вы можете использовать это:
String test = testString.replaceAll("(? I)] *>", "");
Например, если входная строка была SomethingAnother Thing, то приведенное выше приведет к SomethingAnother Thing.
В ситуации, когда ожидается несколько тегов, мы можем сделать что-то вроде:
String test = testString.replaceAll("(? I)] *>", "").replaceAll("\ s+", "").trim();