Javascript 正则表达式排除某个单词

标签 javascript regex parsing

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

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

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

最佳答案

当您使用 ^ 开始字符类(如 [^"//"] 中所示)时,它的意思是“除列出的字符之外的任何字符”。因此 [^"//"] 表示“匹配除 ”之外的任何字符之一/ (它忽略了您列出了每个字符的事实其中两次)。

如果您尝试匹配两个斜杠 (//) 和一个反斜杠 (\) 之间的文本(根据您的问题;您后来发表了评论建议它是两个反斜杠,我稍后会解决这个问题),然后:

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

Str: foo //bar: Captured nothing

Str: foo //bar\: Captured bar

Str: foo //bar\ baz: Captured bar

Str: bar\ baz: Captured nothing

Str: //bar\ baz: Captured bar

Str: foo //bar\ baz \ more \ more: Captured bar

Live copy

或者两个反斜杠:

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

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

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

关于Javascript 正则表达式排除某个单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8869891/

相关文章:

javascript - Ajax JSON 数据和灯箱冲突

javascript - ng-show 不适用于 Angular 项目

java - Java 中的 RSS 提要解析器库

python - 是否有用 Python 编写的 GEDCOM 解析器?

c++ -::boost::spirit: +alnum_p 和连字符

javascript - 如何在 Angular 7 应用程序中集成 Apache Superset Charts?身份验证和 header 问题

Javascript加载Image到Offscreen Canvas,进行webp转换

Java 正则表达式检查包含网址的字符串

javascript - 用于验证工作日志字段模式的正则表达式(以获取用户完成任务的时间)

mysql - Regexp 正则表达式,用于从 SELECT 查询中选择特定字符串模式