我需要一些帮助来替换字符串中的所有非单词字符。
例如,(stadtbezirkspräsident'
应该成为stadtbezirkspräsident
。
这个正则表达式适用于所有语言,所以它有点棘手,因为我不知道如何匹配ñ
或œ
等字符。我尝试用
string.replace(/[&\/\\#,+()$~%.'":*?<>-_{}]/g,' ');
但仍有很多特殊字符,例如Ø
左边。
也许有一个通用的选择器,或者之前有人解决了这个问题?
答案 0 :(得分:6)
尝试使用技巧
str.replace(/(?!\w)[\x00-\xC0]/g, '')
答案 1 :(得分:6)
如果您自己定义了所有Unicode范围,那将会有很多工作。
使用Steven Levithan的XRexExp
package with Unicode add-ons并使用其Unicode属性快捷方式可能更有意义:
var regex = new XRegExp("\\P{L}+", "g")
string = XRegExp.replace(string, regex, "")
答案 2 :(得分:1)
这更像是对Tim Pietzcker的回答,但是在评论中提供代码很尴尬......这是使用XRexExp包的一个简单示例:
<p id=orig>Bundespräsident / ß+ð/ə¿α!</p>
<p id=new></p>
<script src="http://cdnjs.cloudflare.com/ajax/libs/xregexp/2.0.0/xregexp-min.js">
</script>
<script src="http://xregexp.com/addons/unicode/unicode-base.js">
</script>
<script>
var regex = new XRegExp("\\P{L}+", "g");
var string = document.getElementById('orig').innerHTML;
string = XRegExp.replace(string, regex, "");
document.getElementById('new').innerHTML = string;
</script>
对于生产用途,您可能希望下载某些版本的基本软件包和Unicode插件,并在服务器上使用它们。
注意:代码检查Unicode中未分类为字母(字母)的字符。我认为这与“单词字符”的含义相对应,尽管自然语言中的单词可能包含连字符,撇号和其他非字母。
请注意,字符会添加到Unicode中,并且字符的类别可能(很少)会更改。但是包装一直保持良好状态;它对应于Unicode 6.1(版本6.2已经出来,但它没有新的字母)。