【问题标题】:Regular expression to remove anything but alphabets and '[single quote]正则表达式删除除字母和 '[单引号] 之外的任何内容
【发布时间】:2012-02-19 14:16:07
【问题描述】:

如何更改此正则表达式以从字符串中删除除字母和 '(单引号)之外的所有内容?

pattern = /\b(ma?c)?([a-z]+)/ig;
  1. 此模式会删除不需要的空格并将第一个字母大写并将其余字母变为小写
  2. 字母是指英文字母 a-z。

【问题讨论】:

  • 什么是字母表?像拉丁字母、希腊字母、西里尔字母?这是传统的 7 位数据,还是实际上是 Unicode,现在网络占 80% 以上?
  • 您当前的正则表达式是关于什么的?更具体地说,\b(ma?c)? 与您的需求有什么关系?

标签: javascript regex


【解决方案1】:

要删除个字符,你需要使用真正能做到这一点的东西,比如字符串replace函数(它可以接受一个正则表达式作为“from”参数)。

然后您只是处理character class 的正常应用程序,它在JavaScript(和大多数其他正则表达式变体)中使用[...] 进行描述,其中... 应该在类中。您可以在开头使用 ^ 来反转类的含义:

在你的情况下,它可能是:

str = str.replace(/[^A-Za-z']/g, "");

...这将替换除了英文字符 A-Z (ABCDEFGHIJKLMNOPQRSTUVWXYZ)、a-z (abcdefghijklmnopqrstuvwxyz) 和单引号(例如,删除它)。

let str = "This is a test with the numbers 123 and a '.";

console.log("before:", str);
str = str.replace(/[^A-Za-z']/g, "");
console.log("after: ", str);

然而,请注意,英文中不使用的字母字符也不例外,并且在网络上使用的各种语言中(甚至,反常地,在英语中,用“借来的”词,如“voilà”和“naïve”)。

你说过你只用英文 A-Z 没问题,但对于其他人来说:在支持 ES2018 及更高版本的 Unicode 属性匹配的环境中,你可以处理任何被 Unicode 视为“字母”的东西通过使用 \p{Alpha} 属性,而不仅仅是 A-Z。 \p 表示“匹配此 Unicode 属性”(像往常一样,小写版本 \p 表示“匹配”,大写版本 \P 表示“不匹配”),{Alpha} 表示“字母”:

str = str.replace(/[^\p{Alpha}']/gu, "");

(请注意,\p{Alpha} 再次表示“字母”,但因为它属于否定字符类,所以我们排除了字母字符。)

注意上面的 u 标志,以启用更新的 Unicode 功能。这也处理了“voilà”和“naïve”的例子:

let str = "This is a test with the numbers 123 and a ' and voilà and naïve.";

console.log("before:", str);
str = str.replace(/[^\p{Alpha}']/gu, "");
console.log("after: ", str);

【讨论】:

  • OP 说 “除了”。那么,不应该是/[^A-Za-z']/g吗?
  • @FakeRainBrigand:谢谢!我错过了“除了”这个词!固定。
  • 如何删除单引号,除了开头和结尾的单词,例如对于“那是什么,'大'与否”,我想删除第一个单引号,但保持'大'中的单引号不变。
  • 完美作品。谢谢。
猜你喜欢
  • 2021-07-11
  • 2014-03-25
  • 1970-01-01
  • 1970-01-01
  • 2013-02-27
  • 2016-01-16
  • 2019-04-15
  • 2011-10-02
  • 2011-09-08
相关资源
最近更新 更多