Javascript正则表达式不包括单词

时间:2012-01-15 13:17:12

标签: javascript regex parsing

我熟悉javascript regular expression to not match a word,但对我没什么帮助。当给出一个字符串(具有任何类型的字符)时,我希望围绕两个标记解析它,“//”和“\\”。我做了以下事情:

var patt = /.*[^"//"]/gm;
patt.exec(str);

但似乎匹配引号之间出现的任何字符,即“/”和“//”。我怎么能实现它?

2 个答案:

答案 0 :(得分:3)

当你使用^开始一个角色类时(就像你在[^"//"]中那样),它意味着“除了列出的角色之外的任何角色”。因此,[^"//"]表示“匹配除"/之外的任何字符之一(它忽略了您已将其中每个字符列出两次的事实)。

如果您尝试在两个斜杠(//)和一个反斜杠(\)之间匹配文本(根据您的问题;您稍后发表评论表明它是两个反斜杠,我发现那以后),然后:

var match = str.match(/\/\/(.*?)\\/);    // Match between // and \

请注意,我们必须转义斜杠,因为斜杠是正则表达式分隔符;我们必须转义反斜杠,因为反斜杠是转义字符。

上述意思是“匹配两个斜杠后跟零个或多个任何字符后跟反斜杠。” ?之后的*使*非贪婪(因此它会消耗尽可能少的字符来满足表达式)。 ()创建一个捕获组,在匹配对象中将接收在该位置匹配的字符。

示例:

test("foo");
test("foo //bar");
test("foo //bar\\");
test("foo //bar\\ baz");
test("bar\\ baz");
test("//bar\\ baz");
test("foo //bar\\ baz \\ more \\ more");

function test(str) {
    var m = str.match(/\/\/(.*?)\\/),
        cap = (m && m[1]) || "<em>nothing</em>";
    display("Str: <code>" + str + "</code>: Captured <code>" + cap + "</code>");
}

输出:

  

Str:foo:捕获 nothing

     

Str:foo //bar:捕获 nothing

     

Str:foo //bar\:捕获bar

     

Str:foo //bar\ baz:捕获bar

     

Str:bar\ baz:捕获 nothing

     

Str://bar\ baz:捕获bar

     

Str:foo //bar\ baz \ more \ more:捕获bar

Live copy

或两个反斜杠:

var match = str.match(/\/\/(.*?)\\\\/);  // Match between // and \\

Live copy(输出相同,只有两个反斜杠)

关于JavaScript正则表达式的一些阅读:

答案 1 :(得分:1)

如何简单地

var tokens = str.split(/\/\/|\\\\/);