【问题标题】:Using replace and regex to capitalize first letter of each word of a string in JavaScript在 JavaScript 中使用替换和正则表达式将字符串中每个单词的首字母大写
【发布时间】:2011-10-05 14:29:59
【问题描述】:

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

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

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

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

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

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

它不起作用。也没有,

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

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

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

【问题讨论】:

  • 你为什么不使用.toUpperCase()method?
  • 将字符串中的所有字符转换为大写,而OP只想转换第一个字符。
  • 你可以使用 toUpper + 你的答案 str.replace(/\b[a-z]/g, function() {return arguments[0].toUpperCase()})

标签: javascript regex capitalization


【解决方案1】:

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

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

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

【讨论】:

  • 谢谢。但是 JS 怎么知道函数的两个参数是你指定的那个呢?
  • ??呃......我不明白这个问题。 JavaScript“知道”,因为这正是“.replace()”方法被指定和实现的方式。如果第二个参数是一个函数,则运行时系统使用从正则表达式匹配结果中获取的参数调用它。
  • 我的意思是,我检查了 mozilla 参考:developer.mozilla.org/en/JavaScript/Reference/Global_Objects/…,他们没有提到当指定 2 个参数时将传递正则表达式匹配的这些特殊结果
  • 看看它在Specifying a function as a parameter部分的哪里说“p1, p2, ...”是“带括号的子匹配字符串”?跨度>
  • 但并不是说在有多个参数的情况下,第一个参数将是整个匹配项,然后你就会有匹配的组。此外,在函数内部,如果我们打印 _ 和 word,两者是相同的。 “完全匹配”和“匹配组”之间的区别是什么?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-11
  • 2020-02-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多