Сопоставление строки, если она идет после определенной строки

#javascript #regex

#javascript #регулярное выражение

Вопрос:

Мне нужно регулярное выражение для JavaScript для сопоставления John (без учета регистра) после Name:

Я знаю, как это сделать, но я не знаю, как получить строку из другой строки, например, так (из текстовой области):

 Name
  John
  

Это то, что я пытался сделать :: var str = /s[a-zA-Z0-9](?= Name)/;

Логика: получить строку с буквой / цифрами в пространстве строк, за которой следует имя.

Затем я бы использовал этот .test(); метод.


Редактировать:

Я попытался сделать вопрос более простым, чем он должен был быть. Я не совсем понимаю, как мне выделить «John» (действительно что угодно) в новой строке, за которой следует определенная строка (в данном случае Name ).


Например, IF John появляется после Name {dosomething} else{dosomethingelse}

Ответ №1:

К сожалению, JavaScript не поддерживает поиск. Для чего-то такого простого вы можете просто сопоставить обе части строки следующим образом:

 var str = /Names ([a-zA-Z0-9] )/;
  

Затем вам просто нужно извлечь первую группу захвата, если вы хотите получить John . Например:

 "Namen John".match(/Names ([a-zA-Z0-9] )/)[1]; // John
  

Однако, если вы просто используете .test , группа захвата не нужна. Например:

 var input = "Namen John";
if (/Names [a-zA-Z0-9] /.test(input)) {
    // dosomething
} else{
    // dosomethingelse
}
  

Кроме того, если вам нужно убедиться, что Name и John отображаются в отдельных строках, между которыми нет ничего, кроме пробелов, вы можете использовать этот шаблон с флагом multi-line ( m ) .

 var str = /Names*^s*([a-zA-Z0-9] )/m;
  

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

1. @plalx выглядит так, как и OP. (пример строки содержит только пробелы)

2. Я согласен, что OP кажется запутанным, потому что он противоречит сам себе. «сопоставьте John (без учета регистра) после Name:», затем «Логика: получить строку с буквами / цифрами в пространстве строк, за которым следует Name».

3. @Matthew Можете ли вы отредактировать вопрос, чтобы уточнить, что именно вы хотите? Вы хотите текст после Name или перед ним? И должна ли она содержать двоеточие ( Name: )?

4. @Matthew Хорошо, я включил пример, который, я надеюсь, поможет. Однако с вашим редактированием это звучит как небольшая проблема XY . Если это так, я бы рекомендовал вам собрать jsFiddle, который демонстрирует проблему, а также вашу лучшую попытку решить ее на данный момент, и включить это в новый вопрос о том, чего вы на самом деле пытаетесь достичь. Включите ссылку на этот вопрос, если контекст поможет.

5. @p.s.w.g Спасибо за помощь!

Ответ №2:

Здесь вам не нужен предварительный просмотр, просто поместите имя перед символами, которые вы хотите сопоставить. И чтобы включить сопоставление без учета регистра, поместите i модификатор в конец вашего регулярного выражения.

 var str = 'Namen   John'
var re  = /Names [a-z0-9] /i

if (re.test(str)) {
  // do something
} else {
  // do something else
}
  

Используйте строку. match метод, если вы хотите извлечь имя из строки.

 'Namen   John'.match(/Names ([a-z0-9] )/i)[1];
  

[1] Здесь относится к тому, что было сопоставлено / захвачено в группе захвата #1