【问题标题】:Regex replace non-word except dash正则表达式替换除破折号以外的非单词
【发布时间】:2015-05-19 16:48:35
【问题描述】:

我有一个正则表达式模式(\W|_)[^-] 不适用于h_e.l_l.o - w_o.r_d(替换字符串是“”)。

它返回如下内容:

h      w   

我希望至少能看到这样的东西:

h e l l o - w o r d

如何替换除- 符号之外的所有非单词字符和_

【问题讨论】:

  • 你使用什么语言?
  • @user2648694 当您回来时,请考虑检查下面的答案,如果有效,请接受。

标签: regex


【解决方案1】:

要匹配除破折号(或连字符)之外的任何非单词字符,您可以使用

[^\w-]

然而,这个正则表达式不匹配_

你需要一个否定字符类,它可以匹配除字母、数字和连字符以外的任何字符:

/[^-a-zA-Z0-9]+/

或(带有不区分大小写的修饰符):

/[^-a-z0-9]+/i

demo

注意- 放在字符类的开头,不需要转义。

您可以在末尾添加一个加号,以一次性匹配所有不需要的字符以一次性删除它们。

如果您想让您的模式识别 Unicode(也就是说,在某些正则表达式风格中,如果您使用带有/不带有某些标志的速记字符类,它们也将匹配所有 Unicode 对应物),您可以使用

/[^\w-]|_/

查看regex demo(或/(?:[^\w-]|_)+/ 获取这些字符的全部内容)。

这里,[^\w-] 匹配任何不是单词 char(字母、数字或下划线)的字符,而第二个选项 _ 匹配下划线。

【讨论】:

  • 非常感谢 :) 它对我有很大帮助 PS。实际上这个 [^a-zA-Z0-9-] 将在所有需要的情况下工作
  • @user2648694:我用描述和可能的变化更新了答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多