我熟悉javascript regular expression to not match a word,但对我没什么帮助。当给出一个字符串(具有任何类型的字符)时,我希望围绕两个标记解析它,“//”和“\\”。我做了以下事情:
var patt = /.*[^"//"]/gm;
patt.exec(str);
但似乎匹配引号之间出现的任何字符,即“/”和“//”。我怎么能实现它?
答案 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
或两个反斜杠:
var match = str.match(/\/\/(.*?)\\\\/); // Match between // and \\
Live copy(输出相同,只有两个反斜杠)
关于JavaScript正则表达式的一些阅读:
RegExp
page 答案 1 :(得分:1)
如何简单地
var tokens = str.split(/\/\/|\\\\/);