【问题标题】:Why Regex.toString() not equal to string literals in javascript [duplicate]为什么 Regex.toString() 不等于 javascript 中的字符串文字 [重复]
【发布时间】:2018-08-26 16:52:15
【问题描述】:

console.log(/\.js$/.toString() === '/\.js$/') // false
// or
console.log(/\.js$/.toString() == '/\.js$/') // false
   
// but
console.log(/\.js$/.toString()) // /\.js$/
console.log(/\.js$/.toString() === /\.js$/.toString()) // true

【问题讨论】:

    标签: javascript regex string-literals


    【解决方案1】:

    \ 是字符串文字中的一个特殊字符,用于转义下一个字符。使用其中的 2 个。

    console.log(/\.js$/.toString() === '/\\.js$/') // true

    【讨论】:

      【解决方案2】:

      因为当转换为字符串时,\ 的含义发生了变化。在字符串中,它用于转义字符,例如\n\t。在正则表达式中,这意味着从字面上获取下一个字符,例如 . 在您的情况下。因此,当转换为字符串时,\ 必须进行转义,所以/\.js$/ 变为"/\\.js$/"。请注意,如果您随后将其输入 RegExp 构造函数,"\\.js$" 将是有效的,而 "\.js$" 将具有不同的含义,并被解释为 /.js$/

      【讨论】:

        【解决方案3】:

        因为字符串 '/\.js$/' 变成 /.js$/ 这是因为 '.' 在 js 中实际上是转义字符 .

        所以基本上你是在比较 '/\.js$/' 和 /.js$/ ,它们是不同的字符串。

        要获得相同的字符串,您需要通过将字符串文字更改为 '/\\.js$/' 来转义 /

        【讨论】:

          【解决方案4】:

          看看你自己的区别,console.log(/\.js$/.toString()); 打印出/\.js$/console.log('/\.js$/'); 打印出\.js$/,这显然是不同的。(所以你得到了错误,因为两个字符串不同)

          console.log(/\.js$/.toString());
          console.log('/\.js$/');

          【讨论】:

            猜你喜欢
            • 2020-09-15
            • 1970-01-01
            • 2021-12-13
            • 2018-03-29
            • 1970-01-01
            • 1970-01-01
            • 2014-05-11
            • 1970-01-01
            • 2012-12-07
            相关资源
            最近更新 更多