微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用正则表达式捕获包含在字符串中的子字符串

如何解决使用正则表达式捕获包含在字符串中的子字符串

希望你没事。

我无法单独使用正则表达式(在 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 匹配备选方案之一或断言字符串的结尾
  • ) 关闭前瞻

Regex demo

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 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?