Регулярное выражение Javascript — проверяет, содержит ли строка две или более одинаковых буквы

#javascript #regex

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

Вопрос:

Я работаю над некоторым регулярным выражением с помощью JavaScript. Теперь я создал регулярное выражение, которое проверяет, содержит ли строка две или более одинаковых буквы, следующих друг за другом. Я хотел бы создать регулярное выражение, которое проверяет, содержит ли слово / строка две или более одной конкретной буквы, независимо от того, следуют ли они друг за другом или просто в одном и том же слове / строке.

Это должно было бы соответствовать: drama и anaconda, но не соответствовать: lame, kiwi или tree.

Это регулярное выражение в JS.

 const str = "anaconda"; 
str.match(/[a]{2,}/);
 

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

1. Может быть, все, что вам нужно, это /a.*a/ (или /a[^a]*a/ ) проверить, содержит ли строка хотя бы два a s?

2.Что-то вроде S*(S)S*1S* regex101.com/r/VNnfjP/1

Ответ №1:

Используйте

 w*(w)w*1w*
 

Смотрите доказательство

ОБЪЯСНЕНИЕ

 NODE                     EXPLANATION
--------------------------------------------------------------------------------
  w*                      word characters (a-z, A-Z, 0-9, _) (0 or
                           more times (matching the most amount
                           possible))
--------------------------------------------------------------------------------
  (                        group and capture to 1:
--------------------------------------------------------------------------------
    w                       word characters (a-z, A-Z, 0-9, _)
--------------------------------------------------------------------------------
  )                        end of 1
--------------------------------------------------------------------------------
  w*                      word characters (a-z, A-Z, 0-9, _) (0 or
                           more times (matching the most amount
                           possible))
--------------------------------------------------------------------------------
  1                       what was matched by capture 1
--------------------------------------------------------------------------------
  w*                      word characters (a-z, A-Z, 0-9, _) (0 or
                           more times (matching the most amount
                           possible))
 

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

1. Да, для символов word, я думаю, это было бы так.

2. Спасибо за ответ, с отличным объяснением! Но в этом случае регулярное выражение будет соответствовать, например, слову: дерево и киви , и я хочу, чтобы совпадение произошло только в том случае, если рассматриваемое слово содержит два или более: Как в данной строке. Есть какие-нибудь замечания по этому вопросу?

3. Может ли это быть решением: [a]*([a])w*1[a]* ?

4. @Krullmizter Не совсем .

Ответ №2:

Мой мыслительный процесс был примерно таким:

  1. Слово может начинаться с любого алфавита
  2. Слово может заканчиваться любым алфавитом
  3. Похожие буквы могут иметь ноль или несколько алфавитов между ними
  4. Если какие-либо из его букв похожи и соответствуют приведенным выше критериям, тогда примите слово
      regex = /[a-z]*([a-z])[a-z]*1 [a-z]*/