2012-11-03 108 views
6

我需要一些帮助来替换字符串中的所有非单词字符。替换所有非单词字符,如?* +#

作为示例,(stadtbezirkspräsident'应该变为stadtbezirkspräsident

这个正则表达式应该适用于所有语言,所以这很棘手,因为我不知道如何匹配ñœ这样的字符。我试着用

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

解决这一疗法,但仍有许多特殊字符,如Ø左侧。

也许有一个普通的选择器,或者有人已经解决了这个问题吗?

+0

Ø是各种语言(例如丹麦语)的字母:) –

+0

类似:[this](http://stackoverflow.com/questions/2392194/how-to-match-the-international-alphabet-english -az-non-english-with-a-regu)问题。 javascript正则表达式没有任何本地的unicode感知的匹配器 –

回答

6

如果你有定义所有的Unicode范围自己,这将是大量的工作。

它可能会更有意义使用史蒂芬Levithan的XRexExp package with Unicode add-ons,并利用它的Unicode属性快捷键:

var regex = new XRegExp("\\P{L}+", "g") 
string = XRegExp.replace(string, regex, "") 
+1

@Ωmega:感谢您的编辑! –

+1

thx !!!! :D XRegExp真的很棒! –

6

尝试使用招

str.replace(/(?!\w)[\x00-\xC0]/g, '') 
+1

'\ w'不是本地感知或Unicode感知的。 –

+0

@TimPietzcker - 我知道,但我的解决方案只在低十六进制范围内删除特殊的charactrers –

+1

(是的,你是不是编辑它,就像我正在写我的评论?) - 确定,但仍然有足够的字符不会被这个(甚至在8位的ANSI集合中:'×'和'÷'想到)。 –

1

这更加添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已经出来,但它没有新的字母)。