Javascript split()对多个空格的处理方式不同

Javascript split()对多个空格的处理方式不同,javascript,regex,split,Javascript,Regex,Split,我试图将字符串中每个单词的第一个字母替换为大写字母,并通过拆分字符串然后映射每个单词使其工作,如下所示: var S = 'hello world'; var x = S.toLowerCase().split(' ').map(word => word[0].toUpperCase() + word.substr(1)).join(' '); console.log(x); 但是: 如果字符串包含多个空格,如下所示,则出现错误无法读取未定义的属性“toUpperCase” var S

我试图将字符串中每个单词的第一个字母替换为大写字母,并通过拆分字符串然后映射每个单词使其工作,如下所示:

var S = 'hello world';
var x = S.toLowerCase().split(' ').map(word => word[0].toUpperCase() + word.substr(1)).join(' ');

console.log(x);
但是: 如果字符串包含多个空格,如下所示,则出现错误
无法读取未定义的属性“toUpperCase”

var S = 'hello   world';
var x = S.toLowerCase().split(' ').map(word => word[0].toUpperCase() + word.substr(1)).join(' ');

console.log(x);

我尝试按照过去stackoverflow线程中的建议将
+
添加到.split(“”)和.join(“”),如下所示,但这样做只会将第一个单词的第一个字母大写:

var S = 'hello    world';
var x = S.toLowerCase().split(' +').map(word => word[0].toUpperCase() + word.substr(1)).join(' +');

console.log(x); // returns 'Hello    world'

正确的方法是什么?

您可以使用RegExp将每个单词的第一个字符替换为大写版本:

var S='hello world';
var x=S.toLowerCase().replace(/\b\w/g,(m)=>m.toUpperCase());
控制台日志(x)您可以使用RegExp将每个单词的第一个字符替换为大写版本:

var S='hello world';
var x=S.toLowerCase().replace(/\b\w/g,(m)=>m.toUpperCase());

控制台日志(x)首先应使用正则表达式删除重复的空白

var S = 'hello    world';
var x = S.replace(/  +/g, ' ').toLowerCase().split(' ').map(word => word[0].toUpperCase() + word.substr(1)).join(' ');
但如果你想保留这些空间,你可能会想使用

var S = 'hello    world';
var x = S.replace(/\w\S*/g, function(txt){return txt.charAt(0).toUpperCase() + txt.substr(1);});

首先应该使用正则表达式删除重复的空格

var S = 'hello    world';
var x = S.replace(/  +/g, ' ').toLowerCase().split(' ').map(word => word[0].toUpperCase() + word.substr(1)).join(' ');
但如果你想保留这些空间,你可能会想使用

var S = 'hello    world';
var x = S.replace(/\w\S*/g, function(txt){return txt.charAt(0).toUpperCase() + txt.substr(1);});

出现的错误是因为您正在访问空字符串的第一个字符,下面给出了相同的结果:

word = ''
word[0].toUppercase() ...
当字符串为空时,您必须处理该情况

word === '' ? word : word[0].toUppercase() ...

出现的错误是因为您正在访问空字符串的第一个字符,下面给出了相同的结果:

word = ''
word[0].toUppercase() ...
当字符串为空时,您必须处理该情况

word === '' ? word : word[0].toUppercase() ...

这会导致单词的每个字母都大写,而不仅仅是第一个字母Nahuel。好的,但是你没有处理字符串为空的情况。你是否需要保留多个空格,否则你可以使用
。split(+/g)
将多个空格用作分隔符我不明白。你是什么意思?关于我的评论,我的意思是,传递给split的regex用于查找下一个分隔符,因为它已经在regexp之后重复了
g
修饰符
.split(+/)
应该足够了,这将导致单词的每个字母都大写,而不仅仅是第一个字母Nahuel。好的,但是您没有处理字符串为空的情况。您是否要求保留多个空格,否则您可以使用
。split(+/g)
将多个空格用作分隔符我不理解。你是什么意思?关于我的评论,我的意思是,传递给split的regex用于查找下一个分隔符,因为它已经重复了,regexp之后的
g
修饰符没有使用
。split(+/)
应该足够了