#javascript #regex
#javascript #регулярное выражение
Вопрос:
Прежде чем я начну, я просто хочу сказать, что я совершенно новичок в регулярных выражениях, поэтому, пожалуйста, будьте нежны со мной. Любые комментарии о регулярных выражениях в целом будут высоко оценены.
Я написал приведенный ниже код
var str = "<blah blah more <b>test</b>>";
var reg1 = "<(?!b>)(?!/b>)";
str = str.replace(new RegExp(reg1), "amp;<");
var reg2 = ">(?<!b>)(?<!/b>)";
str = str.replace(new RegExp(reg2), "amp;>");
alert(str);
Я проверил регулярное выражение с помощьюhttp://regexr.com ?2toe2 и он делает то, что я хочу, а именно сопоставляет любые < или >, но только если они не являются html-тегами. ‘Я пока только рассмотрел .
Теперь, если вы запустите этот код, http://jsfiddle.net/ashburlaczenko/JdATY/9 / предупреждение никогда не выполняется. Я поместил предупреждение после первой замены, которое отобразилось, так что ошибка находится на втором этапе.
Кто-нибудь может мне помочь? Пожалуйста, помните, что эти регулярные выражения — моя первая попытка.
Заранее благодарю вас.
Редактировать:
<blah blah more <b>test</b>><another <b>blah</b> blah <b>test</b>>
Должно стать
amp;<blah blah more <b>test</b>amp;>amp;<another <b>blah</b> blah <b>test</b>amp;>
Надеюсь, это понятнее.
Комментарии:
1. Проверьте этот веб-сайт: rubular.com , это действительно полезно при создании регулярных выражений.
Ответ №1:
JavaScript не поддерживает поисковые утверждения в регулярных выражениях. Вы можете имитировать это с небольшой помощью из этого поста в блоге, но это все равно не так здорово.
Комментарии:
1. Спасибо за ваш ответ. Знаете ли вы, как я мог бы написать это без использования предварительных утверждений?
Ответ №2:
function escapeHtml($0, $1, $2, $3)
{
var result = $1 == '<' ? 'amp;<' $2 $3 : $1 $2 'amp;>';
return resu<
}
str = str.replace(/([<>])([^<>]*?)(1)/g, escapeHtml);
str = str.replace(/^([^<]*?)>/, '$1amp;>');
str = str.replace(/<([^>]*?)$/, 'amp;<$1');
Это работает для приведенных примеров.
Первая замена выполняет следующее:
- Он ищет повторения
<
or>
, между которыми нет<
or>
, например,<...<
or>...>
. - Первая скобка равна 1 доллару, текст между ними равен 2 долларам, а последняя скобка равна 3 долларам.
- Если значение $ 1 равно < , то экранируется значение $ 1, в противном случае экранируется значение $ 3.
Вторая замена экранируется, >
если она происходит в начале строки без <
перед ней.
Третья замена экранируется, <
если она происходит ближе к концу строки без >
после нее.
Комментарии:
1. Это работает для примера, но я не очень понял, что мне нужно. Регулярное выражение должно заменить все < на <, если только оно не является частью html-тега, о котором на данный момент мы можем сказать, что единственным допустимым html-тегом является a <b> и </b> . Это должно быть то же самое для a > . Над еюсь, это понятнее.
2. Кроме того, знаете ли вы, могут ли регулярные выражения vbscript содержать побочные эффекты?
3. Я даже не знаю, есть ли в vbscript регулярные выражения, извините! У вас есть пример побольше, чтобы я мог понять, что не так со вторым.