首页 > 解决方案 > 仅在有 3 行时捕获文本的正则表达式

问题描述

我有这个 regex1 :

(\w+)\n#(\w+)_(\w+)\n(\w+)

这捕获了以下 text1 :

randomtext
#randomteeexxt_randomqlsdfjml
randomagain

但有时我在 text2 中有第四行:

randomtext
#randomteeexxt_randomqlsdfjml
randomagain
stillrandom

因此,以下 regex2 有效:

(\w+)\n#(\w+)_(\w+)\n(\w+)\n(\w+)

regex2 与 text1 的任何内容都不匹配,这就是我想要的。

regex1 匹配 text2 的前 3 行,但我不想要它。

我希望 regex1 与 text2 的任何内容都不匹配。

标签: regex

解决方案


您可以尝试在当前模式周围放置锚点,以确保它适用于整个输入:

^(\w+)\n#(\w+)_(\w+)\n(\w+)$

以下是如何在 JavaScript 中使用此模式的示例:

var str_pass = 'AAA\n#BBB_CCC\nDDD';
var str_fail = 'AAA\n#BBB_CCC\nDDD\nEEE';
console.log(/^\w+\n#\w+_\w+\n\w+$/.test(str_pass));
console.log(/^\w+\n#\w+_\w+\n\w+$/.test(str_fail));


推荐阅读