Как я могу разделить запятые и точки из слов внутри строки, используя split? - PullRequest
0 голосов
/ 13 июня 2018

Я пытаюсь заменить определенное слово в строке чем-то другим.Например, я хочу изменить «Джон» в let name = 'Hi, my name is John.'; на «Джек».

Я знаю, как разбить строку по словам или символам.Я также знаю, как удалить запятые, точки и другие символы в строке.Однако, если я разделю данную строку разделителем (""), у меня будет "Джон".чего я не хочу.(Я знаю, что могу поменять «Джон» на «Джек», но предположим, что у меня есть пары ключ и значение в объекте, и я использую значения, которые являются именами {Отец: Джек, Мать: Сьюзан, ...}

Я не знаю, как разделить строку слово за словом, включая запятые и точки.

Например, если мне дали ввод, который является строкой:
'Hi, my name is John.'

Я хочу разделить ввод, как показано ниже:
['Hi', ',', 'my', 'name', 'is', 'John', '.']

Кто-нибудь знает, как это сделать?

Ниже приведена задача, над которой я работаю.

Создайте функцию цензора, которая не принимает аргументов. Цензор вернет функцию, которая будет принимать либо две строки, либо одну строку. Когда заданы две строки, возвращенная функция будет удерживать две строки какпара, для использования в будущем. Когда дается одна строка, возвращаемая функция возвращает ту же строку, за исключением того, что все экземпляры первой строки (сохраненной пары) будут заменены второй строкой (сохраненной пары).

//Your code here

const changeScene = censor();
changeScene('dogs', 'cats');
changeScene('quick', 'slow');
console.log(changeScene('The quick, brown fox jumps over the lazy dogs.')); // should log: 'The slow, brown fox jumps over the lazy cats.'

Ответы [ 3 ]

0 голосов
/ 13 июня 2018

Я думаю, что ваш реальный вопрос: «Как заменить подстроку на другую строку?»

Оформить заказ на метод replace :

let inputString = "Hi, my name is John.";
let switch1 = ["John", "Jack"];
let switched = inputString.replace(switch1[0], switch1[1]);
console.log(switched); // Hi, my name is Jack.

ОБНОВЛЕНИЕ: Если вы хотите получить ВСЕ вхождения (g), быть без учета регистра (i) и использовать границы, чтобы это не было словом в другом слове (\\b), вы можете использовать RegExp :

let inputString = "I'm John, or johnny, but I prefer john.";
let switch1 = ["John", "Jack"];
let re = new RegExp(`\\b${switch1[0]}\\b`, 'gi');
console.log(inputString.replace(re, switch1[1])); // I'm Jack, or johnny, but I prefer Jack.
0 голосов
/ 13 июня 2018

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

 var string = 'Hi, my name is John.';
//var arr = string.split(/,|\.| /);
var arr = string.split(/([,.\s])/);
console.log(arr);
0 голосов
/ 13 июня 2018

Использование 'Hi, my name is John.'.split(/[,. ]/); сделает работу.Это разделит запятые и точки и пробелы.

Редактировать: Для тех, кто хочет сохранить запятую и точку, вот мой дико неэффективный метод.

var str = 'Hi, my name is John.'
str = str.replace('.', 'period');
str = str.replace(',', 'comma');
str = str.split(/[,. ]/);
for (var i = 0; i < str.length; i++) {
  if (str[i].indexOf('period') > -1) {
    str[i] = str[i].replace('period', '');
    str.splice(i+1, 0, ".");
  } else if (str[i].indexOf('comma') > -1) {
    str[i] = str[i].replace('comma', '');
    str.splice(i+1, 0, ",");
  }
}

console.log(str);
...