我试图在/
或-
字符之后将每个字母大写。意思是,如果给出字符串
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
显然不是那里。
如何让它按预期工作?
答案 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());