不包含单词的Javascript正则表达式

不包含单词的Javascript正则表达式,javascript,regex,parsing,Javascript,Regex,Parsing,我很熟悉,但对我帮助不大。当给定一个字符串(包含任何类型的字符)时,我希望围绕两个标记“//”和“\\”对其进行解析。我做了以下工作: var patt = /.*[^"//"]/gm; patt.exec(str); 但它似乎匹配引号之间出现的任何字符,即“/”和“/”。我怎样才能做到呢 当您用^启动字符类时(正如您在[^”/“]中所做的那样),它意味着“除了列出的字符以外的任何字符”。因此[^”/“]意味着“匹配除了”和//code>之外的任何字符中的一个字符”(它忽略了您已经列出了它们两

我很熟悉,但对我帮助不大。当给定一个字符串(包含任何类型的字符)时,我希望围绕两个标记“//”和“\\”对其进行解析。我做了以下工作:

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

但它似乎匹配引号之间出现的任何字符,即“/”和“/”。我怎样才能做到呢

当您用
^
启动字符类时(正如您在
[^”/“]
中所做的那样),它意味着“除了列出的字符以外的任何字符”。因此
[^”/“]
意味着“匹配除了
//code>之外的任何字符中的一个字符”(它忽略了您已经列出了它们两次的事实)

如果您试图在两个斜杠(
/
)和一个反斜杠(
\
)之间匹配文本(根据您的问题;您后来发表了一条评论,建议是两个反斜杠,我将在稍后讨论),那么:

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

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

例如:

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
:Captured
bar

Str:
bar\baz
:捕获的

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

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

或对于两个反斜杠:

var match = str.match(/\/\/(.*?)\\\\/);  // Match between // and \\
(输出相同,只是有两个反斜杠)

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

  • (这是一个方便的可链接HTML呈现;规范的是PDF)

当你用
^
开始一个字符类时(就像你在
[^”/“]
中所做的那样),它意味着“除了列出的字符以外的任何字符”。因此
[^”/“]
意味着“匹配除
之外的任何字符中的一个”
//code>(它忽略了你已经列出了它们两次的事实)

如果您试图在两个斜杠(
/
)和一个反斜杠(
\
)之间匹配文本(根据您的问题;您后来发表了一条评论,建议是两个反斜杠,我将在稍后讨论),那么:

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

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

例如:

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
:Captured
bar

Str:
bar\baz
:捕获的

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

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

或对于两个反斜杠:

var match = str.match(/\/\/(.*?)\\\\/);  // Match between // and \\
(输出相同,只是有两个反斜杠)

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

  • (这是一个方便的可链接HTML呈现;规范的是PDF)
    • 简单点怎么样

      var tokens = str.split(/\/\/|\\\\/);
      
      简单一点怎么样

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

      你想干什么?给我们举一个str的例子和期望的结果。你到底想要什么?你能在你的问题中举出一些前后一致的例子吗?例如一对输入输出对。你能举一个你想要实现的例子吗?现在还不完全清楚您想在这里做什么(至少对我来说)。@RobW我希望在指定的标记之间解析给定的字符串,这些标记是“/”和“\\”。例如var str=“hey//you//how\\you\\are//doing”@RobW试图纠正,但不起作用。你想做什么?给我们举一个str的例子和期望的结果。你到底想要什么?你能在你的问题中举出一些前后一致的例子吗?例如一对输入输出对。你能举一个你想要实现的例子吗?现在还不完全清楚您想在这里做什么(至少对我来说)。@RobW我希望在指定的标记之间解析给定的字符串,这些标记是“/”和“\\”。例如var str=“hey//you//how\\you\\are//doing”@RobW试图更正,但它不起作用。谢谢你的回答,尽管我不知道如何使用它,下面是一个我试图解析的示例--“嘿[[you[[how[[you]]正在做什么”--分隔符是“[[”和“]]”@MrIzik:你想用这个例子做什么?特别是嵌套?你可能需要贪婪的捕获和循环,而不是非贪婪的版本,尽管这些分隔符是不平衡的。或者你只是想得到
      [“嘿”,“你”,“你”,“你”,“正在”,“正在做”]
      (这与实际问的问题完全不同)谢谢你的回答尽管我不知道如何使用它,这里有一个我试图解析的例子--“嘿[[you[[how[[you]]正在做什么”--分隔符是“[[”和“]]”@MrIzik:你想用这个例子做什么?特别是用nesti