如何解决使用正则表达式捕获包含在字符串中的子字符串
希望你没事。
我无法单独使用正则表达式(在 JavaScript 中)解决我的问题。
我有以下字符串:
例 1:
error Lorem Ipsum warning dummy text info one more example for test error Another issue
例 2:
error Lorem1 Ipsum1 error Lorem2 Ipsum2
对于这两种情况,我想将文本分成 4 或 2 组:
例 1:
error Lorem Ipsum
warning dummy text
info one more example for test
error Another issue
例 2:
error Lorem1 Ipsum1
error Lorem2 Ipsum2
我很确定解决方案并不复杂。
目前我能够捕获关键字和第一个字符,但不能捕获所有字符(未定义字符数量)。
/((warning|error|info)(?:(^warning|error|info)*...))/gisu
结果是:
error Lo
warning th
info Lo
error An
Regex101 页面:https://regex101.com/r/O9Jz5B/1
感谢您的帮助。
解决方法
在您尝试的模式中,这部分 (?:(^warning|error|info)*...)
表示匹配字符串开头的 warning
的可选重复(无法匹配,因为您不在字符串的开头) ,或匹配 error
或匹配 info
。
然后匹配任意字符 3 次。
由于前 3 个选项后的后 3 个选项不匹配,因此只有 3 个字符 ...
匹配,您会得到类似的匹配
error Lo
^^^
你可能会使用
\b(?:warning|error|info)\b.*?(?=\s*\b(?:warning|error|info|$)\b)
-
\b(?:warning|error|info)\b
匹配单词边界之间的备选方案 1 -
.*?
尽可能匹配 -
(?=
正向前瞻,断言直接向右-
\s*
匹配可选的空白字符 -
\b(?:warning|error|info|$)\b
匹配备选方案之一或断言字符串的结尾
-
-
)
关闭前瞻
const regex = new RegExp("\\b(?:warning|error|info)\\b.*?(?=\\s*\\b(?:warning|error|info|$)\\b)",'gm')
const str = `error Lorem Ipsum warning dummy text info one more example for test error Another issue
error Lorem1 Ipsum1 error Lorem2 Ipsum2
`;
console.log(str.match(regex));
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。