【发布时间】:2020-09-02 18:00:09
【问题描述】:
我有以下带有正则表达式/-+|(?<=: ?).* 的小示例。但这会导致 Node/Chrome 中的无限循环和 Firefox 中的“Invalig regex group”错误。
当我将其更改为 /-+|(?<=: ).*/gm(在后面省略 ?-量词)时,它会运行,但是 - 当然 - 我没有得到在 : 之后不包含任何值的行。
如果我将正则表达式更改为/-+|(?<=:).*/gm(将空间留在后面),我会再次陷入无限循环/错误。
谁能向我解释这种行为以及我必须使用什么正则表达式来匹配以冒号结尾的行?我很想了解...
const text = `
-------------------------------------
Prop Name: 5048603
Prop2 Name:
Bla bla bla: asjhgg | a3857
Location: Something...
-------------------------------------
Prop Name: 5048603
Prop2 Name:
Bla bla bla: asjhgg | a3857
Location: Something...
-------------------------------------
`;
const pattern = /-+|(?<=: ?).*/gm;
let res;
while((res = pattern.exec(text)) !== null)
{
console.log(`"${res[0]}"`);
}
编辑:
预期的输出是:
"-------------------------------------"
"5048603"
""
"asjhgg | a3857"
"Something..."
"-------------------------------------"
"5048603"
""
"asjhgg | a3857"
"Something..."
"-------------------------------------"
【问题讨论】:
-
您发布的示例字符串希望得到什么输出?
-
@WiktorStribiżew 确实添加了预期的输出
-
使用
text.replace(/^[^:\r\n]+:[^\S\r\n]*/gm, ''),如有必要,然后使用.split("\n") -
通常最清楚的问题是先陈述您要达到的目标,然后在适当的情况下给出一个或多个示例,显示每个示例所需的结果,然后展示您尝试过的代码并解释为什么它不起作用,然后回顾一下你对读者的要求。
标签: javascript regex regex-lookarounds