2014-11-02 5 views
2

У меня есть большая строка, в которой мне нужно найти все присутствий подзаконного строки из шаблона:Найти все подстроки, разделенные точкой в ​​строке?

[Word][Dot][Word][Dot]...[Word] 

У меня возникли некоторые проблемы, особенно в связи с неоднократно [Word][Dot][Word] рисунком

Вот строка:

"a.a b..b c.c.c d. .e ff g...g hh.h i.i..i" 

и вот мой текущий шаблон:

\S+[.{1}]\S+ 

The Matcher.find() вернуть те суб строки:

[0,3] a.a 
[4,8] b..b - shouldn't match 
[9,14] c.c.c 
[24,29] g...g - shouldn't match 
[30,34] hh.h 
[35,41] i.i..i - shouldn't match 

Я не могу сделать его игнорировать B, G, I югу строки

Любая помощь будет оценена. Спасибо!

+0

Что ваш ожидаемый результат? –

+0

@AvinashRaj Как я писал выше, он не должен находить подстроки b, g, i. это должен быть выход: [0,3] a.a [9,14] c.c.c [30,34] hh.h – itoor

+0

Можете ли вы показать свой код? – anubhava

ответ

3

быть более явным:

[^\s.]+(?:\.[^\s.]+)+(?!\S) 

Объяснение:

[^\s.]+ # Match one or more characters exceopt dot or whitespace 
(?:  # Start a non-capturing group 
\.  # Match a dot 
[^\s.]+ # Match one or more characters exceopt dot or whitespace 
)+  # Repeat as often as necessary 
(?!\S) # Make sure we don't stop before a non-whitespace character 

Попробуй live on regex101.com.

subject = "a.a b..b c.c.c d. .e ff g...g hh.h i.i..i"; 
 
result = subject.match(/[^\s.]+(?:\.[^\s.]+)+(?!\S)/g); 
 
document.write(result)

+0

@itoor: Спасибо, что согласился на этот ответ, но Казимир поднял важный момент в своем комментарии к вашему вопросу - мое решение будет соответствовать 'j.j', если подстрока' j..j.j' произошла на вашем входе. Как правило, можно было бы избежать этого, используя утверждение lookbehind, но JavaScript не поддерживает их. Обходным решением было бы добавить '(?:^| \ S)' в регулярное выражение (а затем позже обрезать конечный символ пробела с начала каждого совпадения). –

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