根据下面的输入,什么是在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
答案 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
相同