2015-08-27 2 views
1

я пытаюсь найти ровно три точки после того, как друг с другом, а не 4, не только 2 3.Regex JS - Найти ровно три точки

например:

  • Привет мир ... (соответствий)
  • Hello World .... (не соответствуют)
  • ... (Не совпадают)
  • . , , (Не соответствует)
  • Hello World ... Да (Спички)
  • Hello World ... [Linkebreak] (Спички)

Первый старт был:

return text.replace(/\.{3}/g, 'FOUND!'); 

но Безразлично Работа действительно хорошая. Есть идеи?

+0

Вы должны создать группу захвата инкапсулируя поиска в скобках. '/ (\. {3})/g' – somethinghere

+0

Ах, проблема старого вопроса с JS .. Также' hello ... world ... what' имеет два набора из 3 точек – sln

ответ

1

Вы можете попробовать:

return text.replace(/(^|[^.])\.{3}(?!\.)/, '$1FOUND!'); 

Это работает так:

  • Храните первый символ, если:
    • Это начало строки
    • Не точечно
  • Count 3 dots
  • Проверить если следующий один не точка
    • Это называется negative lookahead

Поскольку мы используем жадный матч на первом символе, мы должны добавить его к замене, поэтому $1.


Если это требование, чтобы заменить каждый экземпляр этих 3-х точек, добавьте флаг g в конце регулярного выражения.Что делает его выглядеть следующим образом:

/(^|[^.])\.{3}(?!\.)/g 

Флаг g указывает, что он будет выполнять глобальное сопоставление, вместо того, чтобы сопрягать один раз.

+0

Молодцы: http://codepen.io/Chevex/pen/RWbVBr?editors=101 – Chev

+0

Спасибо! Ваше решение @faraz отлично работает! – Stack

+0

Это заменит только первый экземпляр '...' – fny

4

Regex вы хотите:

/(^|[^.])\.{3}([^.]|$)/g 

заменой JS вы хотите:

text.replace(/(^|[^.])\.{3}([^.]|$)/g, '$1FOUND!$2'); 

Вот ломаются из Regex:

  • (^|[^.]): Нет символов ^ или | символ, который не является точкой [^.]
  • \.{3}: следуют три точки
  • ([^.]|$) следует символ, это не точка [^.] или | конец строки $
  • $1: Включите сначала захватить группу
  • $2: Включите последнюю группу захвата

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

... ... ... ... ... ... => FOUND!!! ... FOUND!!! ... FOUND!!! FOUND!!! 

Тест строка:

"This should be found -> ... \ 
This should not be found -> .... \ 
Something will be found here -> .. .. ...... ... .. \ 
Multiple found -> ... ... .. ... ... .. \ 
... <- That's found \ 
Next line will be found \ 
..." 

Выход 1 итерации:

"This should be found -> FOUND! 
This should not be found -> .... 
Something will be found here -> .. .. ...... FOUND! .. 
Multiple found -> FOUND! ... .. FOUND! ... .. 
FOUND! <- That's found 
Next line will be found 
FOUND!" 

Выход 2 повторениями:

"This should be found -> FOUND! 
This should not be found -> .... 
Something will be found here -> .. .. ...... FOUND! .. 
Multiple found -> FOUND! FOUND! .. FOUND! FOUND! .. 
FOUND! <- That's found 
Next line will be found 
FOUND!" 
+0

Это ломает вещи. Он заменит первый и последний символы. –

+0

Не понял, что вы использовали это для поиска и замены. Обновлено. – fny

0

Это должно быть то, что вы ищете:

^[^.]*\.{3}[^.]*$ 

Demo

Смежные вопросы