Я хочу заменить все пробелы, кроме первого и последнего, как это изображение.
Как заменить только красные?
как заменить красное пространство
Я старался:
.replace(/\s/g, "_");
но он захватывает все пробелы.
Я предлагаю совпадение и фиксировать начальные/конечные пробелы, которые будут сохранены, а затем сопоставлять любые другие пробелы, которые будут заменены на _
:
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
мы возвращаем его содержимое, иначе заменим на _
.
Вы можете использовать ^
для проверки первого символа и $
для последнего, другими словами, для поиска пробела, которому предшествует нечто иное, чем начало строки, или за которым следует что-то другое, кроме конца строки:
var rgx = /(?!^)(\s)(?!$)/g;
// (?!^) => not start of line
// (?!$) => not end of line
console.log(' One Two Three '.replace(rgx, "_"));