【问题标题】:Matching a Forward Slash with a regex将正斜杠与正则表达式匹配
【发布时间】:2013-05-15 11:04:43
【问题描述】:

我在 JavaScript 方面没有太多经验,但我正在尝试创建一个标签系统,而不是使用 @#,而是使用 /

var start = /#/ig; // @ Match

var word = /#(\w+)/ig; //@abc Match

我怎样才能使用/ 而不是#。我试过做var slash = '/' 并添加+ slash +,但失败了。

【问题讨论】:

标签: javascript regex


【解决方案1】:

你可以这样逃避它。

/\//ig; //  Matches /

或者只使用 indexOf

if(str.indexOf("/") > -1)

【讨论】:

  • 谢谢 Ben,我也试过了,但我在最后添加了另一个 \。
  • 我看到有些人将“/”放在 RegEx 的开头和结尾,而其他人则没有。我不明白 "/" 的用法,请您解释一下
【解决方案2】:

您需要使用\ 转义/

/\//ig // matches /

【讨论】:

    【解决方案3】:

    如果您想使用/,您需要使用\ 对其进行转义

    var word = /\/(\w+)/ig;
    

    【讨论】:

      【解决方案4】:

      在正则表达式中,“/”是一个需要转义的特殊字符(AKA 通过在它前面放置一个 \ 来标记它,从而否定它可能提供的任何特殊函数)。

      这是你需要的:

      var word = /\/(\w+)/ig; //   /abc Match
      

      在此处阅读正则表达式特殊字符:http://www.regular-expressions.info/characters.html

      【讨论】:

      • "/" 不是正则表达式中的特殊字符。然而,它是 JavaScript 中的一个特殊字符,用于分隔正则表达式的开始和结束位置。
      【解决方案5】:

      您可以通过在它前面加上\(使其成为\/)来转义它,或者您可以使用new RegExp('/')avoid escaping the regex

      example in JSFiddle

      '/'.match(/\//)            // matches /
      '/'.match(new RegExp('/')  // matches /
      

      【讨论】:

        【解决方案6】:

        您还可以通过将正斜杠括在字符组中来解决对正斜杠的特殊 JS 处理,如下所示:

        const start = /[/]/g;
        "/dev/null".match(start)     // => ["/", "/"]
        
        const word = /[/](\w+)/ig;
        "/dev/null".match(word)      // => ["/dev", "/null"]
        

        【讨论】:

        • +1,使用字符集来避免转义确实会使 RegEx 变长一个字符,但为了可读性,这样做是值得的:/[/]/ 在视觉上比/\// 更清楚地区分了尾随分隔符。跨度>
        • /[/]/ 更容易阅读和工作,但不幸的是,一些 RegEx 验证器会报告 “未转义的分隔符必须用反斜杠转义”,即使在 字符组。所以,我已经切换回丑陋的/\// 表单。
        【解决方案7】:

        我在提取由\/ 分隔的文本时遇到了与上述相关的两个问题,并找到了一个适合两者的解决方案,而不是使用new RegExp,它在开始时需要\\\\。这些发现在 Chrome 和 IE11 中。

        正则表达式

        /\\(.*)\//g
        

        不起作用。我认为 // 被解释为注释的开头,尽管有转义字符。正则表达式(在我的情况下同样有效,但不是一般情况)

        /\b/\\(.*)\/\b/g
        

        也不起作用。我认为第二个/ 会终止正则表达式,尽管有转义字符。

        对我有用的是将/ 表示为\x2F,这是/ 的十六进制表示。我认为这比使用new RegExp 更有效且更易于理解,但当然它需要注释来识别十六进制代码。

        【讨论】:

          【解决方案8】:

          正斜杠是特殊字符,所以你必须在正斜杠之前添加一个反斜杠才能使其工作

          $patterm = "/[0-9]{2}+(?:-|.|\/)+[a-zA-Z]{3}+(?:-|.|\/)+[0-9]{4}/";
          

          其中/代表搜索/ 这样你就

          【讨论】:

            【解决方案9】:

            对我来说,我试图在 C# 的日期中匹配 /。我只是通过使用(\/)来做到的:

            string pattern = "([0-9])([0-9])?(\/)([0-9])([0-9])?(\/)(\d{4})";
            string text = "Start Date: 4/1/2018";
            
            Match m = Regex.Match(text, pattern);
            
            if (m.Success) 
            { 
                Console.WriteLine(match.Groups[0].Value);  // 4/1/2018
            }
            else
            {
                Console.WriteLine("Not Found!");
            }
            

            JavaScript 也应该能够类似地使用(\/)

            【讨论】:

            • 反对者,想解释一下吗?这是可行的,我已经通过测试证明了这一点。
            • 我认为这是一个意外,对不起。我试图撤消它,但它说我的投票被锁定,除非答案被编辑。我看到的唯一一件事是你有一个你似乎没有使用的捕获组的日志。有什么理由为什么所有内容都在括号中?
            • @RyanQuinn 感谢您的解释。我使用括号将事物组合在一起以表示我期望的特定数字。它似乎也需要他们在我用来测试它的网站上:regexr.com我编辑了我的帖子(只是在末尾添加了一个空格),所以如果你愿意,你应该可以删除反对票。
            猜你喜欢
            • 2015-03-15
            • 1970-01-01
            • 1970-01-01
            • 2012-01-12
            • 1970-01-01
            • 2019-08-26
            • 1970-01-01
            相关资源
            最近更新 更多