【问题标题】:What's the use of the [\b] backspace regex?[\b] 退格正则表达式有什么用?
【发布时间】:2013-06-30 13:25:18
【问题描述】:

[\b] 显然匹配退格字符。我无法理解字符串如何包含退格字符。 有人可以给我一个具体的例子来说明如何使用它吗?非常感谢。

【问题讨论】:

  • 当然一个字符串可以包含一个退格“字符”——这里用引号引起来,因为控制代码会更精确。但它是 ASCII 的一部分(因此也是 UTF-8),所以它当然可以出现在使用这些编码的任何地方。
  • 这个字符串在什么环境中使用会构成它——嗯,这是另一个问题。放入 HTML 或从 JS 发出警报/记录,它很可能根本没有明显的效果——但例如,这个字符串被发送到的一台非常旧的(针式)打印机可以恢复一个字符位置,并在其上打印以下字符……
  • 是的,已经看到你的答案了。感谢您的澄清。

标签: javascript regex


【解决方案1】:

虽然所有其他的一般都是正确的(\b 是一个单词边界),但\b 确实表示字符类中的退格:

[\b]

这确实会匹配退格字符。它只是一个可以出现在文本中的 ASCII 控制字符(ASCII 代码 8 或八进制的 10)。我想它主要用于遗留原因,添加变音符号(例如,您可以使用a、退格、´ 来获取á)。如今,这些标记大多已被 Unicode 组合标记所取代。

包含退格键的字符串最终将如何看起来取决于呈现它的软件。如果退格后面跟着新的其他字符,控制台可能仍会将光标向后移动并覆盖那里的内容。要看到这一点,请启动一个交互式脚本控制台(如果您想在 JavaScript 中尝试使用 node.js),然后运行

> console.log("abc\b\bdef")
adef

请注意,如果您省略了def,您只会得到abc,因为退格本身不会删除任何内容。它只会将光标向后移动。

另一方面,您的浏览器可能只是在输入字段中忽略它。例如,检查 Unicode converter,在左下角输入 JavaScript 输入 abc\b\bdef,点击“转换”,“字符”输出不会删除 bc

顺便说一句,\b 是字符类中的退格键并不是 JavaScript 独有的,而是在大多数正则表达式中都以这种方式解释。

进一步阅读:

【讨论】:

  • 查看此答案了解更多详情:stackoverflow.com/a/6792867/758446
  • @BlackVegetable 谢谢,我一直在寻找类似的东西,但找不到任何好的资源
  • 接下来的挑战是构建一个奇怪的(现代)边缘案例,您实际上想要捕捉这样的角色!
  • +1 谢谢,当我看到这个时,我只是在更新我的答案以反映您的 cmets。
  • @BlackVegetable 整洁!谢谢!
【解决方案2】:

在正则表达式的上下文中(字符类之外)\b 并不意味着退格;它的意思是“单词边界”。 There are lots of uses for it。例如,

/\bword\b/

将匹配 some word 但不匹配 someword

正如 m.butter 指出的那样,如果您将它放在字符类中,您可以使用它来匹配退格字符。例如:

var input = "this is a \btest.";
/[\b]/.test(input); // true

【讨论】:

  • @m.buettner:是的,这是唯一的情况。退格字符是\u0008
  • @elclanrs 对不起,我打错了:问题已被编辑。我是新手。我的意思是 [\b],退格字符。什么是一个实际的例子。谢谢!
  • 假设var input 通过<input type="text" /> 来找我们。输入框中的文本(带有退格键)会是什么样子?谢谢
  • @thomas 类似<input type="text" value="this is a test." /> 我想
  • @thomas 当我在 chrome 的开发者工具中检查结果时,我看到了<input type="text" value="this is a test.">。我相信那里确实有一个\b 字符,但可能没有正确显示。
【解决方案3】:

真实示例:我们使用我们自己的协议在客户端(通过托管服务器)之间传递 \b,以允许用户在他们已经发送的文本上退格。在一种类型的客户端(这个是基于网络浏览器的,但其他的不是),我检查退格键命中(e.which==8 // Ref.https://api.jquery.com/keydown/)并发送'\b';其他客户端处理这个(可能自动)。当我的网络客户端收到 \b 时,我的代码必须适当地处理它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-12
    • 2023-01-01
    • 2017-02-08
    相关资源
    最近更新 更多