Отдельное предложение со специальными символами в слова, включая пробелы - PullRequest
0 голосов
/ 07 октября 2018

Я хочу разделить предложение со специальными символами на слова , оставляя пробелы .Примерно так:

"la sílaba tónica es la penúltima".split(...regex...)

до:

["la ", "sílaba ", "tónica ", "es ", "la ", "penúltima"]
    ↑                     ↑      ↑      ↑
  space                 space  space  space

Я пытался с измененной версией этого ответа: https://stackoverflow.com/a/26184632/2083117

С кодом из этого ответа:

"la sílaba tónica es la penúltima".split(/\b(?![\s.])/)

Результат:

["la ", "s", "í", "laba ", "t", "ó", "nica ", "es ", "la ", "pen", "ú", "ltima"]
              ↑                  ↑                                  ↑

Эти специальные символы не должны разбивать слово.

Моя версия просто добавляет специальные символы, которые я хочу сохранить (.áéíóúñ,:;?):

"la sílaba tónica es la penúltima".split(/\b(?![\s.áéíóúñ,:;?])/)

Результат:

["la ", "sí", "laba ", "tó", "nica ", "es ", "la ", "penú", "ltima"]
          ↑              ↑                              ↑

Теперь символы включены, но слово тормозит после них.

Что было бы правильным регулярным выражениемза это?

Ответы [ 3 ]

0 голосов
/ 07 октября 2018

let splitArray = "la sílaba tónica es la penúltima".split(" ")

let splitArrayWithSpaces =  splitArray.map((item, index ) => {
  if(index!== splitArray.length-1) return (item+ " ")
  else return item
})

console.log(splitArrayWithSpaces)
0 голосов
/ 07 октября 2018

Это a-z\xC0-\xff выбирает символы и диакритические знаки.Я разделил это на /[^a-z\xC0-\xff]/.Затем я добавляю пробел.

В качестве альтернативы вы можете разделить на /[\s]/

let test = "la sílaba tónica es la penúltima".split(/[^a-z\xC0-\xff]/)
for(let i=0; i < test.length; i++){test[i]+= " ";}
console.log(test)
0 голосов
/ 07 октября 2018

Попробуйте сопоставить \S+\s* вместо разделения.

var result = "la sílaba tónica es la penúltima".match(/\S+\s*/gi);

console.log(result);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...