Javascript 如何从字符串中删除所有字符
如何使用JavaScript正则表达式从字符串中删除非字母的所有字符?您可以使用以下方法: 如果要保留空格,请执行以下操作:Javascript 如何从字符串中删除所有字符,javascript,regex,string,Javascript,Regex,String,如何使用JavaScript正则表达式从字符串中删除非字母的所有字符?您可以使用以下方法: 如果要保留空格,请执行以下操作: 'Hey! The #123 sure is fun!'.replace(/[^A-Za-z\s]+/g, ''); >>> "Hey The sure is fun" regex/[^a-z\s]/gi基本上是说匹配任何不匹配字母a-z或空格(\s)的内容,同时全局执行此操作(g标志),并忽略字符串的大小写(i标志)。使用的实例属性g,i 全局:是针
'Hey! The #123 sure is fun!'.replace(/[^A-Za-z\s]+/g, '');
>>> "Hey The sure is fun"
regex/[^a-z\s]/gi
基本上是说匹配任何不匹配字母a-z或空格(\s)的内容,同时全局执行此操作(g
标志),并忽略字符串的大小写(i
标志)。使用的实例属性g
,i
全局:是针对字符串中所有可能的匹配项测试正则表达式,还是仅针对第一个匹配项测试正则表达式
无知者:
尝试匹配字符串时是否忽略大小写
使用的特殊字符[a-z]
,+
[^xyz]:求反或补码字符集。也就是说,它匹配未包含在括号中的任何内容。可以使用连字符指定字符范围
例如,[abcd]
与[a-d]
相同。它们与中的“b”匹配
“brisket”和“chop”中的“c”
+:匹配上一项1次或多次。等价于{1,}
JavaScript方法语法
str.replace(regexp | substr,newSubStr |函数[,非标准标志])
非标准标志g
和i
可以在replace语法中传递,也可以内置到regex中。
示例:
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将添加到正则表达式[^a-z\s]+
实现中的正则表达式最好在第页的后面解释
然而,如前所述,前面的答案没有考虑非英语字母,例如元音字母和重音字母。为了不从字符串中删除这些字母,必须将它们从字符范围中排除,如下所示:
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”和“fiancé”等外来词)
因此,除其他功能外,还允许通过使用正则表达式来使用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, "");
或
为了减少对实现的大小写规则的依赖(并且更具可扩展性),对于排除所有非字母Unicode字符(第二个示例中为空格)的RegExp
请确保提供Unicode字符数据库的一个版本,因为它是大的、不断变化的,因此没有内置到regexp.js中(JSX包含UCD的详细文本和压缩脚本版本;regexp.js可以使用这两个版本,后者是首选)。请注意,因此jsx.regexp.regexp
当前无法支持这些,即使它们位于UCD中。有关详细信息,请参阅源代码中的文档
来自免费百科全书。只是在控制台中检查了一下,效果很好。我不知道他是否想保留空格。+1,但我会使用稍微更有效的等价物:
replace(/[^A-Za-z\s]+//g')
这将在每个“gulp”中匹配多个字符,并且对于某些正则表达式引擎,区分大小写模式可能会稍微快一点。请注意,这也将删除重音字符,在我看来是字母。一个问题是重复空格(使用keep spaces方法)-只需将其与另一个replace链接:replace(/[^A-Za-z-s]+//g“”).replace(/\s+/,”);
@Caseman你的意思是…replace(/[^A-Za-z-s]+/g“”).replace(/\s+/g“”)
。还要注意字符串是不可变的,所以“foo”。replace(…);
这没有什么意义。@RD-你期望得到什么可能的答案?我认为它不会比Paolo的答案简单得多…还有什么“可信和/或官方来源”!?这没有任何意义……赏金不是“为我生成测试代码”按钮。标志在ECMAScript标准中。但是String.prototype.replace
的第三个(标志)参数是。避免使用第一个(RegExp)参数上的标志。
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, "");