【问题标题】:RegEx for matching printable ASCII symbols? [duplicate]RegEx 用于匹配可打印的 ASCII 符号? [复制]
【发布时间】:2018-01-27 22:41:53
【问题描述】:

我在看http://asciitable.com

我正在尝试匹配所有可打印的符号,因此范围如下(十进制):

33-47
58-64
91-96
123-126

到目前为止,我见过的最好的是......

([!\"#$%&'()*+,\-.\/:;<=>?@[\\\]\^_`{\|}~"])+

肯定有更好的方法吗?

在我的应用程序中,正则表达式对用户来说是部分可见的,所以我更喜欢眼睛更容易看到的东西(更少的反斜杠和一般的字符)。

编辑:我所说的符号是指从 33 到 127 范围内的所有内容,但不包括字母和数字。

【问题讨论】:

  • 否,但问题措辞不当(按符号,OP 不包括字母和数字)
  • @Aaron:是的,我不太清楚这些是什么我的道歉。
  • 通常,可打印的 ASCII 字符与 [ -~] 匹配
  • 通过更好的方式你是想说更短吗?
  • 退后一步,您可以通过使用来自Control Pictures 块的表示来使这些字符可打印。另外,你为什么专注于 ASCII? JavaScript 使用 Unicode 字符集的 UTF-16 编码。当用户习惯了各种计算机字符时,他们可能无法理解“ASCII”????

标签: javascript node.js regex ascii


【解决方案1】:

以下字符类应该可以正常工作:

[!-\/:-@\[-`{-~]

它由上述 4 个范围组成,其中 /[ 需要转义。

【讨论】:

  • 嗯,我想这是最好的?你会认为会有更简洁的方法来做到这一点。
  • 使用(?![\w\s]). 会更简洁,但效率也较低。
  • 哦,我应该在帖子中提到这一点。对于此应用程序,效率根本不重要。不知道我更喜欢哪个。
  • 那么我想我用两个正则表达式得到了相同的结果:regex101.com/r/5aKJIV/2 vs regex101.com/r/InLTJ1/3
  • (?![\w\s]). 等于 (?!\w)\S 但两者都匹配多于 ascii 符号。
【解决方案2】:

您当前的正则表达式非常好,确实没有更好的方法,但如果您正在寻找更短的正则表达式,您可以使用以下方法:

(?=[!-~])[\W_]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-08-23
    • 2010-11-01
    • 1970-01-01
    • 2015-05-06
    • 2017-06-01
    • 2019-09-26
    • 2013-01-06
    • 2014-08-05
    相关资源
    最近更新 更多