如何从字符串中删除所有字符

时间:2009-06-19 00:13:31

标签: javascript regex string

如何使用JavaScript RegEx删除字符串中不是字母的所有字符?

3 个答案:

答案 0 :(得分:57)

您可以使用replace方法:

'Hey! The #123 sure is fun!'.replace(/[^A-Za-z]+/g, '');
>>> "HeyThesureisfun"

如果你想保留空格:

'Hey! The #123 sure is fun!'.replace(/[^A-Za-z\s]+/g, '');
>>> "Hey The sure is fun"

正则表达式/[^a-z\s]/gi基本上是要匹配任何不是字母az或空格(\ s)的东西,而是全局地执行此操作(g标志)并忽略字符串的大小写( i旗帜。)

答案 1 :(得分:11)

RegEx个实例属性使用gi

  

global:是否针对字符串中的所有可能匹配测试正则表达式,或仅针对第一个匹配。

     

ignoreCase:       是否在字符串中尝试匹配时忽略大小写。

RegEx使用了[a-z]+

的特殊字符
  

[^ xyz]:一个否定或补充的字符集。也就是说,它匹配括号中未包含的任何内容。您可以使用连字符指定一系列字符。

     

例如,[abcd][a-d]相同。它们匹配'b'   “牛腩”和“剁”中的“c”。

     

+:匹配前面的项目1次或更多次。相当于{1,}。

JavaScript string replace方法语法

  

str.replace(regexp | substr,newSubStr | function [,非标准标志]);

非标准旗帜g& i可以在替换语法中传递或内置到正则表达式中。 示例:

var re = /[^a-z]+/gi;   var str = "this is a string";   var newstr = str.replace(re, "");   print(newstr);

var str = "this is a string";   var newstr = str.replace(/[^a-z]+/, "", "gi");   print(newstr);

要匹配空格字符,\ s \ n将被添加到正则表达式[^a-z\s]+

JavaScript Reference

答案 2 :(得分:8)

ECMAScript实施中的正则表达式是Mozilla Developer Network (formerly, Mozilla Developer Center)RegExp articleJavaScript Language Reference的最佳解释。

但是,如前所述,之前的答案并未考虑非英语字母,例如变音符号和重音字母。为了不从字符串中删除这些字母,您必须将它们从字符范围中排除,如下所示:

var s = "Victor 1 jagt 2 zwölf 3 Boxkämpfer 4 quer 5 über 6 den 7 Sylter 8 Deich";

s = s.replace(/[^a-zäöüß]+/gi, "");

这种方法很快变得乏味且难以维护,特别是如果需要考虑几种自然语言(即使在正确的英语中也有“déjàvu等外来词语“和”未婚夫“)。

因此,在PCRE个功能中,JSX:regexp.js允许您通过Unicode Character Database (UCD)使用可以使用Unicode属性类的正则表达式。

然后你会写¹

var s = "Victor 1 jagt 2 zwölf 3 Boxkämpfer 4 quer 5 über 6 den 7 Sylter 8 Deich";

var rxNotLetter = new jsx.regexp.RegExp("\\P{Ll}+", "gi");

s = s.replace(rxNotLetter, "");

var s = "El 1 veloz 2 murciélago 3 hindú 4 comía 5 feliz 6 cardillo 7 y 8 kiwi. La cigüeña tocaba el saxofón detrás del palenque de paja"
      + " – Съешь 1 же 2 ещё 3 этих 4 мягких 5 французских 6 булок, да 7 выпей 8 чаю.";

var rxNotLetterOrWhitespace = new jsx.regexp.RegExp("[^\\p{Ll}\\p{Lu}\\s]+", "g");

s = s.replace(rxNotLetterOrWhitespace, "");

减少对实现的大写/小写怪癖的依赖(并且更具可扩展性),对于排除所有非字母Unicode字符的RegExp(以及第二个示例中的空白)。

Testcase

一定要提供Unicode字符数据库的版本,因为它很大,不变,因此没有内置到regexp.js中(JSX包含一个详细的文本和UCD的压缩脚本版本;两者都可以regexp.js使用,后者是首选。请注意a conforming ECMAScript implementation does not need to support characters beyond the Basic Multilingual Plane (U+0000 to U+FFFF),因此jsx.regexp.RegExp目前无法支持这些,即使它们位于UCD中。有关详细信息,请参阅源代码中的文档。

来自Pangrams的免费百科全书

¹Wikipedia