#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