如何使用JavaScript RegEx删除字符串中不是字母的所有字符?
答案 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个实例属性使用g
,i
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]+
。
答案 2 :(得分:8)
ECMAScript实施中的正则表达式是Mozilla Developer Network (formerly, Mozilla Developer Center)页RegExp
article中JavaScript 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
(以及第二个示例中的空白)。
一定要提供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中。有关详细信息,请参阅源代码中的文档。