#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');
- Я установил переменную «anyOpenTag» в регулярное выражение, которое проверяет , является ли это открытым тегом, например (
lt;pgt;
,lt;divgt;
иlt;spangt;
т. Д…- Я установил переменную «anyCloseTag» в регулярное выражение, которое проверяет , является ли это закрывающим тегом, таким как (
lt;/pgt;
,lt;/divgt;
, и т. Д….)- Я установил переменную «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. Я думаю, что название, а также первое предложение в моем вопросе ясно говорят об этом, хотя я не привел пример для каждого возможного случая 🙂