Перехват регулярных выражений от хэш-знака «#» до следующего пробела

#javascript #regex

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

Вопрос:

У меня есть строка скрипта, которая :

 #type1 this is the text of the note
 

Я пробовал это, но для меня это не сработало :

 ^#([^s] )
 

type Другими словами, я пытаюсь уловить, что находится между хэш-знаком «#» и следующим пробелом, исключая хэш-знак «#», а строка, которую я хочу перехватить, является буквенно-цифровой строкой.

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

1. Хорошо, и где ваша попытка? Мы можем помочь вам исправить это, но мы не собираемся писать это за вас (если вы не наймете нас ;))

2. @NiettheDarkAbsol Я одобрил попытку, которую я предпринял

3. Почему ожидаемый вывод type и не type1 учитывая, что вы хотите захватить все между # и следующим пробелом? Ваш код должен работать так, как он есть: regex101.com/r/uxfyFN/1

Ответ №1:

С помощью функций регулярных выражений, предоставляемых Javascript:

 exec_result = /#(w*)/.exec('#whatever string comes here');
 

Я считаю exec_result[1] , что это должна быть нужная вам строка.

Возвращаемое значение exec() метода можно найти здесь: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/exec

Ответ №2:

Вы действительно близки:

 /^#(w )s/
 

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

Ответ №3:

Чтобы получить буквенно-цифровое совпадение (которое даст вам type1), вместо отрицаемого класса символов [^s] , который не соответствует символу пробела, вы можете использовать класс символов и указать, что вы хотите сопоставить [A-Za-z0-9] .

Затем используйте отрицательный прогноз, чтобы утверждать, что то, что справа, не является символом без пробелов:

 ^#([A-Za-z0-9] )(?!S)
 

Демонстрация регулярных выражений

Ваше совпадение находится в первой группе захвата. Обратите внимание, что вам не нужно экранировать #

Например, с использованием флага без учета регистра /i

 const regex = /^#([A-Za-z0-9] )(?!S)/i;
const str = `#type1 this is the text of the note`;
console.log(str.match(regex)[1]); 

Если вы хотите только сопоставить тип, вы можете использовать:

 ^#([a-z] )[a-z0-9]*(?!S)
 

Демонстрация регулярных выражений

 const regex = /^#([a-z] )[a-z0-9]*(?!S)/i;
const str = `#type1 this is the text of the note`;
console.log(str.match(regex)[1]); 

Ответ №4:

Я понял это.

/^#([^s] ) (.*)$/