2010-05-13 7 views
0

для ниже кодаРасщепление текст с яваскрипта матча

var str = "I left the United States with my eyes full of tears! I knew I would miss my American friends very much.All the best to you"; 
var re = new RegExp("[^\.\?!]*(?:[\.\?!]+|\s$)", "g"); 
var myArray = str.match(re); 

и это то, что я получаю в результате

myArray[0] = "I left the United States with my eyes full of tears!" 
myArray[1] = " I knew I would miss my American friends very much." 

Я хочу добавить еще одно условие, чтобы регулярное выражение, так что текст сломается только если есть место после знака препинания (? или .или!)

Я делаю так, чтобы результат для вышеуказанного случая был

myArray[0] = "I left the United States with my eyes full of tears!" 
myArray[1] = " I knew I would miss my American friends very much.All the best to you " 
myArray[2] = "" 

ответ

0
.+?([!?.](?= |$)|$) 

должен работать.

Это будет соответствовать любой последовательности символов, которые являются либо

  • следует знак препинания, который сам с последующим пробелом или истекшей строки или
  • с последующим концом строки ,

Используя неохотный квантор +?, он находит кратчайшие последовательности (= отдельные предложения).

В JavaScript:

result = subject.match(/.+?([!?.](?= |$)|$)/g); 

EDIT:

Для того, чтобы избежать регулярных выражений расщеплению на "пространстве/одной буквы или многоразрядных чисел/точка", вы можете использовать:

result = subject.match(/(\d+\.| [^\W\d_]\.|.)+?([!?.](?= |$)|$)/g); 

Будет разделено

Я покинул Соединенные Штаты с моими глазами полный слез! 23. Я знал, что очень буду скучать по моим американским друзьям . I. Все лучшее для вас.

в

I left the United States with my eyes full of tears! 
23. I knew I would miss my American friends very much. 
I. All the best to you. 

Что она делает это вместо того, чтобы просто соответствие любого символа, пока не найдет точка является:

  • Сначала попытайтесь сопоставить пространство, число, и точку ,
  • Если это не удается, попробуйте сопоставить пробел, букву и точку.
  • Если это не удается, сопоставьте любой символ.

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

+0

Можно ли предотвратить строку ломаться в отчетности, если персонаж, как» С. «„пространство“, а затем„одиночным символом или многоразрядного числом“следует». «На самом деле, я хочу понять, как мы можем достичь этого, чтобы я мог добавить больше таких случаев. – Sourabh

+0

Большое спасибо, я пытаюсь понять выражение. – Sourabh

1

var str = "Я покинул Соединенные Штаты своими глазами, полными слез! Я знал, что очень буду скучать по своим американским друзьям.Все самое лучшее для вас «

var re =/[^\.\?!]+[\.?!](+|[^\.\?!]+)/g; 
var myArray = str.match(re); 
myArray.join('\n') 

/* returned value: (String) 
I left the United States with my eyes full of tears! 
I knew I would miss my American friends very much.All the best to you 
*/ 
Смежные вопросы