Javascript заменяет все вхождения зарезервированных символов ".." на ".." в строке приводит к замене полной строки - PullRequest
3 голосов
/ 03 апреля 2019

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

Я создал эту функцию-прототип:

String.prototype.replaceAll = function (search, replacement) {
    var target = this;
    return target.replace(new RegExp(search, 'g'), replacement);
};

Однако, какой бы ввод я ни пробовалэто приводит к тому, что полная строка заменяется на . символов, хотя я экранировал строку ввода и вывода.Чего мне не хватает?

var description = 'hi there...how are you';
description = description.replaceAll('..', '. .');
description = description.replaceAll('\.\.', '\. \.');

Ответы [ 2 ]

3 голосов
/ 03 апреля 2019

\ - escape-символ в строковых литералах, а также в регулярных выражениях.

"\.\." создает строковое значение .., которое, интерпретируемое как регулярное выражение, соответствует любым двум символам.

console.log('\.\.');

Вам нужно экранировать \ в строковом литерале, чтобы передать его в механизм регулярных выражений:

'\\.\\.'

производит строковое значение \.\..

String.prototype.replaceAll = function(search, replacement) {
  var target = this;
  return target.replace(new RegExp(search, 'g'), replacement);
};

var description = 'hi there...how are you';
console.log(description.replaceAll('\\.\\.', '. .'));

Сказав, что использование литерала регулярного выражения кажется мне более простым, чем прятать флаг g за пользовательским методом:

description.replace(/\.\./g, '. .');

Не нужно задумываться о escape-последовательностях.


Похожие: Есть ли функция RegExp.escape в Javascript?

1 голос
/ 03 апреля 2019

1001 * попробовать *

description.replace(/(\.)(?=\.)/g,'. ');

, где

var description = 'hi there...how are you';
description = description.replace(/(\.)(?=\.)/g,'. ');

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