如何使用Regex实现此结果?

时间:2018-04-28 06:31:13

标签: javascript regex

根据下面的输入,什么是在javascript中提供所需输出的正则表达式?我必须在不使用多行标志的情况下实现这一目标。

输入

\n
\n
abc def.\n
\n
*\n
\n

所需的输出(保持相同的行数,但将=插入空行)

=\n
=\n
abc def.\n
=\n
*\n
=\n

实际输出(使用正则表达式/[^a-zA-Z0-9.*]+\n/替换为=\n;它以某种方式删除了两个连续的`\ n'中的一个

=\n
abc def.=\n
*=\n

3 个答案:

答案 0 :(得分:2)

您可以尝试使用替换函数的组合:



str = "\n\nabc def.\n\n*\n\n";

str = str.replace(/\n/g, "=\n");

str = str.replace(/(.)=\n/g, "$1\n");

console.log(str);




说明 -

在第一次替换后,输出如下:

=
=
abc def.=
=
*=
=

然后,您替换后跟=\n的任何字符,并将其替换为相同的字符(由$1给出),然后换行。

答案 1 :(得分:1)

您希望的结果是"保持相同的行数,但将=插入空白行"

空("空白" )行是与regex匹配的行:^$

^表示输入字符串的开头,$表示输入字符串的结尾但是如果指定了m修饰符(表示" multi -line" ),^匹配一行的开头,$匹配一行的结尾。

您的代码应该简单:

input = "\n\nabc def.\n\n*\n\n";

output = str.replace(/^$/mg, '=');

如上所述,m修饰符会更改^$的含义。换行字符与上面的regex不匹配,因此它们不需要出现在替换字符串中。

g修饰符告诉String.replace()查找并替换所有匹配的子字符串,而不仅仅是第一个(String.replace()的默认行为)。

详细了解JavaScript中的regular expressions

答案 2 :(得分:0)

这应该适用于两个replace

value.replace(/^\n/, '=\n').replace(/\n\n/g, '\n=\n')

  • 如果第一行以空白行开头,则第一行replace会处理第一行。

  • 第二个replace负责其他行:在空行中添加=与在两个连续=之间插入\n相同