奇怪的javascript正则表达式

时间:2012-04-30 14:35:18

标签: javascript regex escaping

我找到了以下正则表达式

new RegExp("(^|\\s)hello(\\s|$)");

我引用http://www.javascriptkit.com/jsref/escapesequence.shtml来表示正则表达式.. 但是我看不到那里的转义序列..我知道它指的是空白字符...... 但前面的\做什么..哪个角色被逃脱了? 我在以下文档http://ejohn.org/blog/getelementsbyclassname-speed-comparison/

中的Treewalker代码中找到了类似的正则表达式

4 个答案:

答案 0 :(得分:4)

double \\是为了逃避字符串中的反斜杠。换句话说,\\将被解释为正则表达式的\

答案 1 :(得分:1)

在这种情况下,额外\是逃避\中的\。因为我们在一个字符串声明中,你必须加倍\以逃避它。处理并保存字符串后,它将减少到(^ | \ s)hello(\ s | $)

答案 2 :(得分:1)

第一个\后面的字符被转义。通常\ss转义为“空格”。在您的示例中,转义的字符为\

你所拥有的是一个表达式,它构建了(^|\s)hello(\s|$)的正则表达式(可能是传递到其他地方) - 单词“hello”先于空格或字符串的开头,后跟空格或结尾字符串。

答案 3 :(得分:1)

基本上,reg ex正在做的是查找围绕单词hello的文本的开始和结束项目,并在字面上将'\ s'同时解释为字符串内容。

在外行人看来,它正在寻找一个完全匹配的字符串:

| \ shello \ S |

正如其他人所说的那样,双\ \是为了逃避单个\而不是reg ex引擎寻找空白区域,它实际上将'\ s'作为一个字符串。

^表示行的开头,$表示行的结尾和2 |被解释为寻找的实际字符

最后,您的开始和结束标记都被括起来(),这意味着它们将被提取并放置在匹配中,对于您使用C#意味着您可以使用以下方式获取它们:

myRegex.Matches.Group[1].Value
myRegex.Matches.Group[2].Value

1是开始分组,2是结束。