第一场比赛之前一组,第二场比赛之后一组

时间:2018-08-11 02:38:23

标签: javascript regex

我是regex的新手,但我感到非常困惑。我在尝试弄清楚如何将该字符串分成两组时遇到麻烦

Lorem ipsum\/|/ | dolor sit654 | amet consectetur

第1组:Lorem ipsum\/|/

第2组:dolor sit654 | amet consectetur

模式是|(“空格” +“竖线” +“空格”)

我想让这些字符在组中的每个字符的第一个匹配之前和之后得到一切

我尝试编写这样的正则表达式,但没有成功: /(.*?)(\s\|\s)(.*)/

这可能吗?

3 个答案:

答案 0 :(得分:1)

您的正则表达式可以正常工作:

let str = 'Lorem ipsum\/|/ | dolor sit654 | amet consectetur';
console.log(str.match(/(.*?)(\s\|\s)(.*)/))

输出:

Array(4) [ "Lorem ipsum/|/ | dolor sit654 | amet consectetur", "Lorem ipsum/|/", " | ", "dolor sit654 | amet consectetur" ]

您可以通过删除第二个捕获组来改善它

console.log(str.match(/(.*?)\s\|\s(.*)/))

输出:

Array(3) [ "Lorem ipsum/|/ | dolor sit654 | amet consectetur", "Lorem ipsum/|/", "dolor sit654 | amet consectetur" ]

或使其不被捕获:

console.log(str.match(/(.*?)(?:\s\|\s)(.*)/))

输出:

Array(3) [ "Lorem ipsum/|/ | dolor sit654 | amet consectetur", "Lorem ipsum/|/", "dolor sit654 | amet consectetur" ]

答案 1 :(得分:1)

您当前正在捕获一个组中的初始|-但您希望第2组成为第二个子字符串,而不是分隔字符。要么将它们移出组:

(.*?) \| (.*)
     ^^^^

或改为使用非捕获组:

(.*?)(?: \| )(.*)
     ^^^^^^^^

https://regex101.com/r/v7ZRr1/1

console.log(
  `Lorem ipsum\/|/ | dolor sit654 | amet consectetur`
  .match(/(.*?) \| (.*)/)
);

答案 2 :(得分:1)

您可以将CLI prepare error: [Oracle][ODBC][Ora]ORA-00923: FROM keyword not found where expected 与正则表达式一起减去中间捕获组使用。 split的使用方式将多余的空字符串留在数组的末端,但是您可以使用以下方法轻松split

filter()