将/和 - 字符后的每个字母大写

时间:2017-01-05 16:34:33

标签: javascript regex

我试图在/-字符之后将每个字母大写。意思是,如果给出字符串

this/is/a/pretty-cool/url

它的预期输出看起来像

This/Is/A/Pretty-Cool/Url

我的代码:

string = string.replace(/\/(\b[a-z](?!\s))/g, function(i,e) { return '/'+e.toUpperCase() });

目前返回

this/Is/A/Pretty-cool/Url

显然不是那里。

如何让它按预期工作?

3 个答案:

答案 0 :(得分:7)

这里有一个简单的解决方案:

string = string.replace(/(^|\/|-)(\S)/g, s=>s.toUpperCase())

您只需在字符串开头后跟一个字符匹配,即/-。这很简单,因为在这些字符中加上其中一个字符是没有问题的('/'.toUpperCase()'/')。

现在,让我们想象你不想把第一部分大写(也许它在你真正的问题上有所不同,也许你关心的是那个必须要大写{{ {1}}),然后你会使用这样的子匹配:

"/"

(但你不必在这里走到极端)

答案 1 :(得分:0)

从您的代码开始,您错过了-字符。

因此,更改代码以支持您可以使用的字符:

var string = string.replace(/(^|\/|-)(\b[a-z](?!\s))/g, function(i,e) { return i.charAt(0)+e.toUpperCase() });

var string = string.replace(/(^|\/|-)(\b[a-z](?!\s))/g, function(i,e) { return i.toUpperCase() });

答案 2 :(得分:0)

这是另一个变体,它在任何非单词字符之后的大写字母,也在字符串的开头:

string = string.replace(/(^|\W)(\w)/g, (match, a, b) => a + b.toUpperCase());

(或使用与@DenysSéguret相同的捷径):

string = string.replace(/(^|\W)(\w)/g, s => s.toUpperCase());