【问题标题】:Why have two '\' in Regex? [duplicate]为什么在正则表达式中有两个“\”? [复制]
【发布时间】:2026-01-13 07:10:01
【问题描述】:
function trim(str) {

    var trimer = new RegExp("(^[\\s\\t\\xa0\\u3000]+)|([\\u3000\\xa0\\s\\t]+\x24)", "g");

    return String(str).replace(trimer, "");

}

为什么在's'和't'之前有两个'\'?

这个“[\s\t\xa0\u3000]”是什么意思?

【问题讨论】:

  • 它是两个反斜杠,因为单个反斜杠在 Javascript 中具有特殊含义。因此,您需要“转义”反斜杠
  • 我们应该找到一个更好的 QA 来关闭重复。这个太不一样了(但我确定它是重复的)
  • 我能找到的最好的@DenysSéguret,我猜他们都被跳得太简单了..

标签: javascript regex


【解决方案1】:

您使用的是literal string

在文字字符串中,\ 字符用于转义一些其他字符,例如\n(新行)或\"(双引号),并且必须将其自身转义为@987654326 @。所以当你想让你的字符串有\s时,你必须在你的字符串文字中写\\s

幸好 JavaScript 提供了更好的解决方案,Regular expression literals:

var trimer = /(^[\s\t\xa0\u3000]+)|([\u3000\xa0\s\t]+\x24)/g

【讨论】:

  • 希望还是感谢
  • @Liam 对不起,我还在学习英语(大约 30 年前开始,我想几个世纪后我会好起来的)
  • 不要道歉,我也是,我已经说了一辈子!
【解决方案2】:

为什么在's'和't'之前有两个'\'?

在正则表达式中,\ 是一个转义符,它告诉正则表达式后面跟着一个特殊字符。因为您在string literal 中使用它,所以需要用\ 转义\。

这个“[\s\t\xa0\u3000]”是什么意思?

表示匹配下列字符之一:

此函数效率低下,因为每次调用它都会将字符串转换为正则表达式,然后编译该正则表达式。使用Regex literal 而不是字符串并在函数外部编译正则表达式会更有效,如下所示:

var trimRegex = /(^[\s\t\xa0\u3000]+)|([\u3000\xa0\s\t]+$)/g;

function trim(str) {
    return String(str).replace(trimRegex, "");
}

除此之外,\s 将匹配任何空格,包括制表符、宽空格和不间断空格,因此您可以将正则表达式简化为以下内容:

var trimRegex = /(^\s+)|(\s+$)/g;

浏览器现在实现了修剪功能,因此您可以使用它并为旧版浏览器使用 polyfill。看到这个Answer

【讨论】: