我正在尝试在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
,它也一样......
答案 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
可以提供更清晰,更具描述性的代码。