替换所有非单词字符,例如?* +#

时间:2012-11-03 13:53:02

标签: javascript regex character match

我需要一些帮助来替换字符串中的所有非单词字符。

例如,(stadtbezirkspräsident'应该成为stadtbezirkspräsident

这个正则表达式适用于所有语言,所以它有点棘手,因为我不知道如何匹配ñœ等字符。我尝试用

解决这个问题
string.replace(/[&\/\\#,+()$~%.'":*?<>-_{}]/g,' ');

但仍有很多特殊字符,例如Ø左边。

也许有一个通用的选择器,或者之前有人解决了这个问题?

3 个答案:

答案 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已经出来,但它没有新的字母)。