Положительный взгляд с регулярным выражением javascript

Меня перепутали с регулярным выражением.. Мне было сложно для меня.. Я видел код вроде:

function myFunction() {
   var str = "Is this all there is";
   var patt1 = /is(?= all)/;
   var result = str.match(patt1);
   document.getElementById("demo").innerHTML = result;
}

Когда я запускаю этот код, он дал мне вывод is.

Но когда я добавляю как /is(?=there)/, он ничего не выводил. Я новичок в регулярном выражении. Надеюсь, вы, ребята, можете помочь в понимании позитивного взгляда в регулярном выражении. Я следил за многими учебниками, которые мне не помогли.

Надеюсь, вы, ребята, можете мне помочь. Спасибо!

Ответ 1

Регулярное выражение is(?= all) соответствует буквам is, но только если они немедленно, за которыми следуют буквы all

Аналогично, регулярное выражение is(?=there) соответствует буквам is, но только если они немедленно, за которыми следуют буквы there

Если вы объединили два в is(?= all)(?=there), вы пытаетесь сопоставить буквы is, но только если они немедленно, за которыми следуют буквы all И буквы there в то же время... , что невозможно.

Если вы хотите совместить буквы is, но только если они сразу следуют или буквами all или буквы there, то вы можете использовать:

is(?= all|there)

Если, с другой стороны, вы хотите совместить буквы is, но только если они немедленно, за которыми следуют буквы all there, то вы можете просто использовать:

is(?= all there)

Что делать, если я хочу is следовать за all и there, но где угодно в строке?

Затем вы можете использовать что-то вроде is(?=.* all)(?=.*there)

Ключ к пониманию lookahead

Ключ к lookarounds должен понять, что lookahead - это утверждение, которое проверяет, что что-то следует, или предшествует в определенной позиции в строке. Вот почему я сразу выделил . Следующая статья должна развеять любую путаницу.

Ссылка

Освоение Lookahead и Lookbehind

Ответ 2

Положительный Lookahead не подходит для того, что there не сразу следует .

is(?=there) # matches is when immediately followed by there

Чтобы соответствовать , если there следует где-то в строке, вы должны:

is(?=.*there) 

Объяснение

is          # 'is'
(?=         # look ahead to see if there is:
  .*        #   any character except \n (0 or more times)
  there     #   'there'
)           # end of look-ahead

См. Демо

Подробный учебник Я рекомендую: Как использовать Lookaheads и Lookbehinds в регулярных выражениях