Заменить все пробелы, кроме первого и последнего

1

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

Как заменить только красные?

как заменить красное пространство

Я старался:

.replace(/\s/g, "_");

но он захватывает все пробелы.

Теги:
whitespace

2 ответа

4
Лучший ответ

Я предлагаю совпадение и фиксировать начальные/конечные пробелы, которые будут сохранены, а затем сопоставлять любые другие пробелы, которые будут заменены на _:

var s = " One Two There ";
console.log(
 s.replace(/(^\s+|\s+$)|\s/g, function($0,$1) {
     return $1 ? $1 : '_';
   })
);

Вот,

  • (^\s+|\s+$) - Группа 1: одно или несколько пробелов в начале или конце строки
  • | - или же
  • \s - любые другие пробелы.

$0 в методе обратного вызова представляет целое совпадение, а $1 - это аргумент, содержащий содержимое группы 1. После сопоставления $1 мы возвращаем его содержимое, иначе заменим на _.

1

Вы можете использовать ^ для проверки первого символа и $ для последнего, другими словами, для поиска пробела, которому предшествует нечто иное, чем начало строки, или за которым следует что-то другое, кроме конца строки:

var rgx = /(?!^)(\s)(?!$)/g;
// (?!^) => not start of line
// (?!$) => not end of line
console.log(' One Two Three '.replace(rgx, "_"));
  • 0
    К вашему сведению: если в начале или в конце есть более 1 пробелов, это не будет работать должным образом.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню