我遇到问题,RegExp没有将特殊字符识别为单词字符(或者更糟糕 - 计为\b
):
"wäww, xöxx yüyy zßzz".replace(/\b\w/g,function(m){return m.toUpperCase();})
应该返回
"Wäww, Xöxx Yüyy Zßzz"
但不幸的是返回:
"WäWw, XöXx YüYy ZßZz"
我玩过几次编码,但没有帮助...
如何识别字符或以其他方式解决该问题?
similar problem有一个问题没有令人满意的答案 功能
答案 0 :(得分:2)
不要试图解决unicode和js的细微差别,只需使用空格作为替换/ caplitalize逻辑的标记:
> "wäww, xöxx yüyy zßzz".replace(/( |^)[^ ]/g,function(m){return m.toUpperCase();});
"Wäww, Xöxx Yüyy Zßzz"
OR
> "wäww, xöxx yüyy zßzz".replace(/(\s|^)[^ ]/g,function(m){return m.toUpperCase();});
"Wäww, Xöxx Yüyy Zßzz"
OR
> "wäww, xöxx yüyy zßzz".replace(/([\s\.,:;]|^)[^ ]/g,function(m){return m.toUpperCase();});
"Wäww, Xöxx Yüyy Zßzz"
这种技术可以正确地将重音字符大写:
> "wäww, öhyes".replace(/( |^)[^ ]/g,function(m){return m.toUpperCase();})
"Wäww, Öhyes"
答案 1 :(得分:1)
我选择从不同的角度来解决问题:我怎样才能得到每个单词的第一个字母?
以下是我提出的建议:
"wäww, xöxx yüyy zßzz".replace(/(?:^| )[^ ]/g,function(m){return m.toUpperCase();});
返回:
"Wäww, Xöxx Yüyy Zßzz"
答案 2 :(得分:1)
如果您只需要它用于演示而不是Javascript计算,请设置CSS样式
text-transform: capitalize;
元素上的会起作用。
答案 3 :(得分:0)
你必须修改你的正则表达式:
"wäww, xöxx yüyy zßzz".replace(/[\wäüßö]/g,"x")
答案 4 :(得分:0)
简单的方法是,反转你的表达式并手动定义所有非单词字符(不好但很有用)
/[^\s,\.;+\- and much more]/g
如果您知道所有可能的单词字符,那么就可以这样做
/[\wäöüßÄÖÜ and much more]/g
答案 5 :(得分:0)
搜索[^a-zA-Z ,]|[a-zA-z]
并替换为x
您可以看到此working here。
答案 6 :(得分:0)
JavaScript正则表达式将\w
视为匹配的Ascii字母,常用数字和下划线字符。通常,JavaScript regexp在Ascii世界中发挥作用。
如果您需要处理少量“特殊”字符,您可以单独编写它们,但一般情况下,您应该查找可以更一般地处理情况的库,如问题的答案中所建议的那样{{ 3}} @ Pumbaa80在评论中提及。