使用OR?对连续表达式使用RegEx

nfs0ujit  于 2022-11-26  发布在  其他
关注(0)|答案(2)|浏览(113)

如何用OR匹配一系列的表达式?这是为了清除每行前面可能包含嵌入式空格或制表符的纯文本数据。这是为了在换行符处准备.split

const oldStr = `abc
   abc
    abc`;

我想替换:

newline + 0 or more spaces OR tabs

newline

这就达到了我的目的

newStr = oldStr.replaceAll(/\n */g, "\n");  // newline + spaces
newStr = newStr.replaceAll(/\n\t*/g, "\n");  // newline + tabs

如何在一条语句中实现这一点?下面的语句失败:
尝试,用管道:

newStr = oldStr.replaceAll(/\n *|\t*/g, "\n");

尝试,在OR前后加上括号:

newStr = oldStr.replaceAll(/\n( *|\t*)/g, "\n");

尝试,并在OR两边加上斜杠:

newStr = oldStr.replaceAll(/\n/ *|\t*/g, "\n");

尝试,用方括号代替管道:

newStr = oldStr.replaceAll(/\n[ *\t*]/g, "\n");

尝试,使用引号和管道:

newStr = oldStr.replaceAll("\n *\t|*/g", "\n");

尝试,带引号、竖线和圆括号:

newStr = oldStr.replaceAll("\n( *|\t*)/g, "\n");

尝试,带引号和方括号:

newStr = oldStr.replaceAll("\n[ *\t*]/g", "\n");

您可以随意提供一个将清理与.split语句相结合的解决方案,或者一个非正则表达式解决方案。

nwo49xxi

nwo49xxi1#

您不需要为拆分做“准备”,只需按\n进行拆分,并可选择用空格括起来:

text = `   How razorback-jumping 
   frogs 
can
 \t   level six \t
         \t piqued gymnasts!`         
         
console.log(text.trim().split(/[ \t]*\n[ \t]*/g))
3qpi33ja

3qpi33ja2#

方括号应该可以使用,但是*(或+)修饰符必须位于方括号的外部:

newStr = oldStr.replaceAll(/\n[ \t]+/g, "\n");

我选择+是因为它意味着“1次或多次出现”,如果出现0次,替换就没有意义了。
演示:

let text = `ABC
   DEF
   \t\tGHI
\t\tJKL
MNO`;
console.log(text.split("\n"));

text = text.replaceAll(/\n[ \t]+/g, "\n");
console.log(text.split("\n"))

相关问题