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

10 javascript regex string

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

Pao*_*ino 57

您可以使用以下replace方法:

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

如果你想保留空格:

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

正则表达式/[^a-z\s]/gi基本上是指匹配任何不是字母az或空格(\ s)的东西,同时全局(g标志)并忽略字符串(i标志)的情况.

  • +1但是我会使用稍微更有效的等价物:`replace(/ [^ A-Za-z\s] +/g,'');`这将匹配每个"gulp"中的多个char,并且一些正则表达式引擎可以稍微加快大小写敏感模式. (10认同)
  • 一个问题是复制空格(使用保持空格方法) - 只需将其链接到另一个替换:`replace(/ [^ A-Za-z\s] +/g,"").replace(/\s + /,"");` (3认同)

小智 11

使用RegEx实例属性g,i

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

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

使用RegEx特殊字符[a-z],+

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

例如,[abcd]与...相同[a-d].它们匹配"胸部"中的"b"和"印章"中的"c".

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

JavaScript 字符串替换方法语法

str.replace(regexp | substr,newSubStr | function [,Non-standard flags]);

非标准标志gi可替换语法来通过或内置于正则表达式.例子:

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);
Run Code Online (Sandbox Code Playgroud)

为了匹配空格字符,还会将\ s添加到正则表达式中[^a-z\s]+.

JavaScript参考


Poi*_*ars 8

在正则表达式的ECMAScript实现是恕我直言最好的解释Mozilla开发者网络(以前,Mozilla开发者中心)的在RegExp文章中的JavaScript语言参考页.

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

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, "");
Run Code Online (Sandbox Code Playgroud)

这种方法很快变得乏味且难以维护,特别是如果需要考虑几种自然语言(即使在正确的英语中也有诸如" 似曾相识 "和" 未婚夫 "之类的外来词).

因此,在其他PCRE功能中,JSX:regexp.js 允许您通过Unicode字符数据库(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, "");
Run Code Online (Sandbox Code Playgroud)

要么

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, "");
Run Code Online (Sandbox Code Playgroud)

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

测试用例

一定要提供Unicode字符数据库的一个版本,因为它很大,不断变化,因此没有内置到regexp.js中(JSX包含一个详细的文本和UCD的压缩脚本版本;两者都可以使用,并且后者是首选,regexp.js).请注意,符合ECMAScript的实现不需要支持基本多语言平面(U + 0000到U + FFFF)之外的字符,因此jsx.regexp.RegExp即使它们位于UCD中,目前也不支持这些字符.有关详细信息,请参阅源代码中的文档.

¹ 来自维基百科的庞拉姆,免费的百科全书.

  • Upvoted.如果有非英语字符,这是必须的! (2认同)