将正斜杠与正则表达式匹配


89

我没有JavaScript方面的丰富经验,但是我正在尝试创建一个标记系统,而不是使用@or #,而是使用/

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

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

我该如何使用/而不是#。我尝试做var slash = '/'并添加+ slash +,但是失败了。


1
请更改标题。而您真正想做什么?看完你的问题我还是不知道。
OptimusCrime

我不确定我是否理解。
约翰·斯特里克勒

Answers:


123

您可以这样逃避它。

/\//ig; //  Matches /

或只使用indexOf

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

谢谢Ben,我也尝试过,但最后添加了另一个\。
iBrazilian2



6

在正则表达式中,“ /”是需要转义的特殊字符(AKA通过在其前面加上\进行标记,从而否定了它可能提供的任何特殊功能)。

这是您需要的:

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

在此处阅读RegEx特殊字符:http : //www.regular-expressions.info/characters.html


16
“ /”不是正则表达式中的特殊字符。但是,它是JavaScript中的一个特殊字符,它定义了正则表达式的开始和结束位置。
sokkyoku

5

您还可以将正斜杠包含在字符组中,以解决特殊的JS处理,例如:

const start = /[/]/g;
"/dev/null".match(start)     // => ["/", "/"]

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

2
+1,使用字符集来避免转义确实会使RegEx一个字符更长,但值得一读:为了可读性:在/[/]/视觉上比分隔符更清晰地区分尾随定界符/\//
Dem Pilafian

2
/[/]/更易于阅读和使用,但不幸的是,某些RegEx验证器将报告即使在字符组中,必须使用反斜杠对未转义的分隔符进行转义”。所以,我改回了丑陋的/\//形式。
Dem Pilafian


1

对我来说,我正在尝试/在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也应该能够类似使用(\/)


唐纳德,关心解释吗?这行得通,我已经通过测试证明了这一点。
vapcguy

1
我认为这是个意外,对不起。我试图撤消该操作,但是它说除非修改答案,否则我的投票已锁定。我唯一看到的是您有一个捕获组的日志,您似乎没有在使用它们。任何原因都用括号括起来?
瑞安·奎因

1
@RyanQuinn感谢您的解释。我用括号将事物组合在一起,以表示我期望的特定数字。它似乎也要求他们在我用来对其进行测试的网站上: regexr.com 我编辑了我的帖子(仅在末尾添加了一个空格),因此,如果您愿意的话,您应该可以删除该downvote。
vapcguy

0

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

正则表达式

/\\(.*)\//g

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

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

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

什么工作对我来说是表示/\x2F,这是十六进制表示/。我认为这比使用更加有效和易于理解new RegExp,但是当然需要注释以标识十六进制代码。


0

正斜杠是特殊字符,因此,必须在正斜杠之前添加一个反斜杠以使其起作用

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

/代表搜索/这样,您

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.