Регулярное выражение Javascript проверяет, что строка заканчивается открытым тегом html чем угодно, кроме тега

#javascript #regex

Вопрос:

Я хотел бы убедиться, что строка заканчивается любым открытым тегом, за которым следует или не следует текст

например:

 lt;divgt;some text here  

или

 lt;spangt;some text here  

должно совпадать

но

 lt;divgt;some text herelt;/divgt;  

или

 lt;h1gt;some text herelt;/h1gt;  

не следует

Я попытался придумать решение (извините, я не профессионал в регулярных выражениях)

 let anyOpenTag = 'lt;([^/gt;][^gt;])*gt;'; let anyCloseTag = 'lt;/[^/gt;][^gt;]*gt;'; let neitherOpenNorCloseTag = `[^(${anyOpenTag}|${anyCloseTag})]`; let regex = new RegExp(  escapeRegExp(`${anyOpenTag}${neitherOpenNorCloseTag}*
 #javascript #regex



Вопрос:

Я хотел бы убедиться, что строка заканчивается любым открытым тегом, за которым следует или не следует текст например:
 lt;divgt;some text here  

или

 lt;spangt;some text here  

должно совпадать

но

 lt;divgt;some text herelt;/divgt;  

или

 lt;h1gt;some text herelt;/h1gt;  

не следует

Я попытался придумать решение (извините, я не профессионал в регулярных выражениях)

), 'gi');

  1. Я установил переменную «anyOpenTag» в регулярное выражение, которое проверяет , является ли это открытым тегом, например ( lt;pgt; , lt;divgt; и lt;spangt; т. Д…
  2. Я установил переменную «anyCloseTag» в регулярное выражение, которое проверяет , является ли это закрывающим тегом, таким как ( lt;/pgt; , lt;/divgt; , и т. Д….)
  3. Я установил переменную «neitherOpenNorCloseTag», которая пытается объединить их и проверить, не является ли это одним из них, используя [^….]

наконец, я проверяю, совпадает ли регулярное выражение с любым тегом ни с одним тегом.

к сожалению, это не работает для меня, именно та часть, которая проверяет «Ни в коем случае».

я ценю вашу помощь, даже если у вас есть лучшее регулярное выражение, я был бы благодарен

Ответ №1:

Основываясь на ваших примерах, этот фрагмент работает:

 const regex = /lt;.*gt;.*lt;/.*gt;/g  const regexString = (regex) =gt; {  return (s) =gt; {  return !s.match(regex)  } }  const validateString = regexString(regex)  const strings = [  'lt;divgt;some text here',  'lt;spangt;some text here',  'lt;divgt;some text herelt;/divgt;',  'lt;h1gt;some text herelt;/h1gt;', ]  const validated = strings.map(validateString)  console.log('Result:', validated) 

Комментарии:

1. если вы добавите строку без открытого тега в начале, т. е. «некоторый случайный текст» в свой массив строк, она будет оценена как истинная, что неверно, открытый тег всегда должен присутствовать в начале строки

2. @medBouzid да, я понимаю. В примерах вы не указали такой случай, поэтому он не был принят во внимание.

3. Я думаю, что название, а также первое предложение в моем вопросе ясно говорят об этом, хотя я не привел пример для каждого возможного случая 🙂