Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何从字符串中删除所有字符_Javascript_Regex_String - Fatal编程技术网

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 全局:是针

如何使用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

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

无知者: 尝试匹配字符串时是否忽略大小写

使用的特殊字符
[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, "");