5

以下内容虽然多余,但效果很好:

'leap of, faith'.replace(/([^ \t]+)/g,"$1");

并打印“飞跃,信仰”,但在以下内容中:

'leap of, faith'.replace(/([^ \t]+)/g,RegExp.$1);它打印“信仰信仰信仰”

因此,当我希望将每个单词的第一个字符大写时:

'leap of, faith'.replace(/([^ \t]+)/g,RegExp.$1.capitalize());

它不起作用。也不行,

'leap of, faith'.replace(/([^ \t]+)/g,"$1".capitalize);

因为它可能在替换组值之前将“$1”大写。

我想使用原型的 capitalize() 方法在一行中做到这一点

4

1 回答 1

13

您可以将函数作为“.replace()”的第二个参数传递:

"string".replace(/([^ \t]+)/g, function(_, word) { return word.capitalize(); });

该函数的参数首先是整个匹配,然后是匹配的组。在这种情况下,只有一组(“单词”)。函数的返回值用作替换。

于 2011-10-05T14:33:09.147 回答