【问题标题】:Replace nonnumeric characters excluding unicode替换不包括 unicode 的非数字字符
【发布时间】:2013-11-29 22:20:49
【问题描述】:

我有这个正则表达式,它可以替换除字母数字、空格和破折号之外的所有内容。

str.replace(/[^\w\s-]+/g, '')

A) 我怎样才能使它排除 str 中的 unicode 单词? 我应该手动输入所有!#$%etc。我要排除的符号?

B) 另外,如果我想去掉表情符号(因为我允许使用其他 unicode)并且只想保留其他语言的单词?

【问题讨论】:

  • 项目A:str.replace(/[^A-Za-z0-9\s-]/g, '');?
  • 定义“unicode 词”。您到底想排除什么(显然,从要删除的字符集中)?
  • 你能举一些你指的是哪个表情符号的例子吗?其中一些?哪一个? en.wikipedia.org/wiki/Emoji#In_the_Unicode_standard
  • @JukkaK.Korpela 例如“ιδέα”是希腊字符中的“unicode word”,在 unicode 中为:'\u03b9\u03b4\u03ad\u03b1'。如果我尝试上面的.replace(),我会得到一个空字符串。示例:jsfiddle
  • 示例不是定义。对于编程,您需要一个定义。由于 \w 的定义方式(它只匹配某些 Ascii 字符),您会得到一个空字符串。

标签: javascript regex unicode


【解决方案1】:

如果您知道字符集范围,您可以排除这些。这将排除所有非数字字符

 str = str.replace(/[^0-9]+/g, '');

【讨论】:

  • 这将删除比问题中的代码更多的字符。目的显然是删除 less.
【解决方案2】:

最安全的方法是在字符集中包含您不想匹配的字符列表,如您在A 中所述。

  • ^ = 否定匹配
  • \w = a-zA-Z0-9 的快捷方式,
  • \s =(空格),
  • !#$%- = 这些特定字符

否定匹配导致字符类匹配列表中没有的任何内容,您可以省略 + 以匹配要删除的单个字符:

输入str = 'this is a test )(*&^%$#@!~';

正则表达式str.replace(/[^\w\s!#$%-]/g, '');

结果this is a test %$#!

见:http://regex101.com/r/nD4wL1

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-04-19
    • 2011-04-26
    • 2013-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多