正则表达式替换保留空格的单词

时间:2014-02-03 04:29:41

标签: javascript regex

我正在尝试在javascript中开发一个函数来获取短语并处理每个单词,保留whiteSpaces。它会是这样的:

properCase('  hi,everyone   just  testing') => '  Hi,Everyone   Just  Testing'

我尝试了几个正则表达式,但是我找不到获取单词的方法,应用函数,并在不触及空格的情况下替换它们。

我正在尝试

'  hi,everyone   just  testing'.match(/([^\w]*(\w*)[^\w]*)?/g, 'x')
["  hi,", "everyone   ", "just  ", "testing", ""]

但我无法理解为什么要捕捉空间。我只想捕获(\ w *)组。也试过/(?:[^\w]*(\w*)[^\w]*)?/g,它也一样......

4 个答案:

答案 0 :(得分:3)

这样的东西
'  hi,everyone   just  testing'.replace(/\b[a-z]/g, function(letter) {
    return letter.toUpperCase();
});

如果您想处理每个单词,可以使用

'  hi,everyone   just  testing'.replace(/\w+/g, function(word) {
    // do something with each word like
    return word.toUpperCase();
});

答案 1 :(得分:1)

使用全局修饰符(g)时,基本上会忽略捕获组。返回的数组将包含整个表达式的每个匹配项。看起来你只想匹配连续的单词字符,在这种情况下\w+就足够了:

>>> '  hi,everyone   just  testing'.match(/\w+/g)
["hi", "everyone", "just", "testing"]

答案 2 :(得分:1)

请参阅此处: jsfiddle

function capitaliseFirstLetter(match)
{
    return match.charAt(0).toUpperCase() + match.slice(1);
}

var myRe = /\b(\w+)\b/g;
var result = "hi everyone,     just testing".replace(myRe,capitaliseFirstLetter);
alert(result);

匹配每个单词大写。

答案 3 :(得分:0)

我不清楚你真正追求的是什么。 为什么你的正则表达式不起作用?如何让它工作?这是一种在句子中提取单词和空格的方法:

var str   = '  hi,everyone   just  testing';
var words = str.split(/\b/);   // [" ", "hi", ",", "everyone", " ", "just", " ", "testing"]
words     = word.map(function properCase(word){ 
                        return word.substr(0,1).toUpperCase() + word.substr(1).toLowerCase();
            });
var sentence = words.join(''); // back to original

注意:在进行任何字符串操作时,replace会更快,但split / join可以提供更清晰,更具描述性的代码。