Javascript как разбить строку на несколько разделителей и включить их в результат - PullRequest
0 голосов
/ 30 апреля 2018

Я пытаюсь разделить строку по нескольким разделителям и включить их в результат. Рассматривая все последовательные непробельные символы как отдельные слова. Пример: «Я работаю над новым супер-проектом« Уау! становится "! Уууууууууууууууууууууууууууууууууу! - Супер новый человек, работающий я" Мой код софар:

function test(string){
    console.log(string.split(/([.'\!'+a-zA-Z]+)/g ).reverse().join(' ') );
}

var string ="I'm working on a new super-project wow. Yay!"
test(string)

вывод пока: Ура! Вот это да. проект - супер новый на работе я

Я все еще получаю неправильный результат. Любая помощь будет оценена.

Ответы [ 2 ]

0 голосов
/ 30 апреля 2018

Правила не так ясны, может быть больше случаев для включения, но если нет, то разделение на [!?.\s-]+ (или какими-либо другими разделителями) будет решением. Вам не нужно взламывать .replace() или .match() методы:

var str = "I'm working on a new super-project wow. Yay!";
console.log(str.split(/([!?.\s-])/g).reverse().join(''));
0 голосов
/ 30 апреля 2018

Я предлагаю сначала поменять слова со склеенной пунктуацией (используя .replace(/(^|\s)(\w+)([^\w\s]+)(?!\S)/g,"$1$3$2")), а затем сопоставить все непробельные куски и объединить с пробелом:

function test(string){
    console.log(string.replace(/(^|\s)(\w+)([^\w\s]+)(?!\S)/g,"$1$3$2").match(/\S+/g).reverse().join(' ') );
}
//"!Yay .wow project-super new a on working I'm"
var string ="I'm working on a new super-project wow. Yay!"
test(string)

Детали регулярного выражения для замены знаков препинания:

  • (^|\s) - Группа 1: начало строки или пробела
  • (\w+) - Группа 2: одно или несколько символов слова
  • ([^\w\s]+) - Группа 3: любые слова 1+, кроме слов и пробелов
  • (?!\S) - символы без пробелов не допускаются сразу справа от текущего местоположения. Вместе с (^|\s) эти подшаблоны образуют границы пробельных слов .
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...