【问题标题】:How can I search for the string "\\" using javascript or regular expressions? [duplicate]如何使用 javascript 或正则表达式搜索字符串“\\”? [复制]
【发布时间】:2015-10-29 15:44:41
【问题描述】:

我有字符串“\\”表示空或未知日期字段的数据。我是正则表达式的新手,所以请原谅我可能的无知。我知道 \ 是转义字符,它告诉regex 解释器忽略以下字符。

因此,您可以将单个反斜杠与“\\”匹配。然而,匹配两个连续的反斜杠被证明要麻烦得多。 "\\" 显然不起作用,它匹配一个反斜杠并转义以下字符。

我不能使用.replace(),因为它遇到了同样的转义字符问题,而且我一直不知道如何以编程方式准确搜索“\\”。

Google 一直没用。如何将“\\”与正则表达式或简单的 javascript 匹配?

【问题讨论】:

  • 尝试使用其中的 4 个。
  • 是您要替换的字符串的值\\,或者是您实际要替换的字符串的值\,在您的帖子中包含转义字符"\\" ?
  • 使用这个:str.match(/\\\\/g); 其中 str 是您要搜索的字符串或使用 replace 函数,这取决于您,但四个 `` 字符将起作用。第一个逃过第二个,第三个逃过第四个
  • 其实是两个反斜杠。使用四个反斜杠与双反斜杠不匹配,在 javascript 和 regexr.com 中进行了测试。
  • @awimley /\\\\/.test('\\\\') 工作正常,也就是说正则表达式匹配两个反斜杠字符。在我看来,您将字符串文字中的 "\\" 误认为是两个反斜杠字符,而实际上它是一个反斜杠字符,前面是一个恰好是反斜杠的转义字符。

标签: javascript regex


【解决方案1】:

使用\\ 转义每个\

alert("\\\\".indexOf("\\\\")); // 0
alert((String.fromCharCode(92) + String.fromCharCode(92)).indexOf(String.fromCharCode(92) + String.fromCharCode(92))); // 0, BTW I would do this way ;)

alert(/\\\\/.test("\\\\")); // true
alert(/\\{2}/.test("\\\\")); // true

【讨论】:

    【解决方案2】:

    只需使用 4 个反斜杠 \\\\

    您可以在 Regex101 上查看演示 here

    【讨论】:

      【解决方案3】:

      一个斜线:\\

      两个斜线:\\\\

      四个斜线:\\\\\\\\

      它匹配一个反斜杠并转义以下字符:这不是正在发生的事情。要匹配单个反斜杠,需要第一个反斜杠来告诉正则表达式“下一个字符不是某个正则表达式宏;我只想匹配纯字符,并且只匹配那个字符。”这与“跳过”或“允许任何”字符无关。事实上,即使对于其他字符,它仍然是用来转义它的反斜杠。

      三个星号:\*\*\*

      或者,你可以写这样的东西。

      18 个反斜杠:\\{18}

      【讨论】:

        【解决方案4】:

        如果您拥有的字符串文字是"\\",并且您想要匹配该字符串中的字符value,您只需要匹配\,因为value字符串是\

        如果你的字符串字面量是"\\\\",你需要匹配\\,因为字符串的值是\\

        使用正则表达式 literal 您必须像在字符串文字中一样转义反斜杠:

        /\\/g //matches any single backslash character
        
        /\\\\/g //matches any double backslash characters
        

        通过将正则表达式 string 传递给 RegExp 构造函数,您必须转义字符串的反斜杠,然后再转义正则表达式:

        new RegExp("\\\\", 'g'); //matches any single backslash character
        
        new RegExp("\\\\\\\\", 'g'); //matches any double backslash characters
        

        传递给正则表达式构造函数的字符串需要有一个与您在正则表达式文字中使用的值相同的。这意味着转义某些字符的额外级别。这对于需要为字符串转义但不是正则表达式值的某些字符以及需要为正则表达式而不是字符串文字转义的其他字符可能会变得特别混乱。

        例如,字符串中的引号字符("')需要转义,否则它将结束字符串文字:

        /"/ //regular expression to match a double quote
        new RegExp("\""); //regular expression string to match a double quote character
        new RegExp('"'); //alternative regular expression string to match a double quote character
        

        注意反斜杠不需要双重转义。

        作为另一个例子,. 字符需要在正则表达式中转义,否则it'll match any character that isn't a line terminator

        /\./ //regular expression to match a period character
        new RegExp('\\.'); //regular expression string  to match a period character
        

        注意反斜杠字符是否需要双重转义。

        【讨论】:

        • 谢谢,文字和正则表达式字符串之间的区别让我无法理解。这是最好的答案。
        【解决方案5】:

        $("#search").keyup(function() {
          _this = this;
          $.each($(".newgrid tbody").find("tr"), function() {
            if ($(this).text().toLowerCase().replace(/\s+/g, '').indexOf($(_this).val().replace(/\s+/g, '').toLowerCase()) == -1)
              $(this).hide();
            else
              $(this).show();
          });
          ChangeTableCount();
        });
        
        function ChangeTableCount() {
          var rowCount = $('.newgrid tr:visible').length;
          $('.newgrid caption').text("SMSF REGISTERS (TOTAL: " + (rowCount - 1) + ")");
        }
        <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
        <input type="text" id="search" class="sb_input" placeholder="Type to search..." style="width: 532px; min-width: 100px; height: 35px; display: inline" />
        <div style="margin-left: 20px;">
          <table class="newgrid">
            <thead>
              <tr class="newgrid-header">
                <th scope="col">Summary</th>
                <th scope="col">Name</th>
                <th scope="col">test</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td>\\</td>
                <td>Individual</td>
                <td>Current</td>
              </tr>
              <tr>
                <td>//</td>
                <td>xyz</td>
                <td>Current</td>
              </tr>
              <tr>
                <td>145</td>
                <td>abc</td>
                <td>register</td>
              </tr>
              <tr>
                <td>girls</td>
                <td>f</td>
                <td>register4</td>
              </tr>
            </tbody>
          </table>
          <br />
        </div>

        【讨论】:

        • 虽然此代码可能会回答问题,但提供有关此代码为何和/或如何回答问题的额外上下文可提高其长期价值。
        猜你喜欢
        • 2019-12-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-10-17
        相关资源
        最近更新 更多