Javascript: код регулярного выражения не будет выполняться

#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 регулярные выражения, извините! У вас есть пример побольше, чтобы я мог понять, что не так со вторым.