正则表达式 - 特殊元音不被识别为单词字符

时间:2012-10-27 19:04:24

标签: javascript regex character-encoding

我遇到问题,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有一个问题没有令人满意的答案 功能

7 个答案:

答案 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在评论中提及。