我有一个字符串:
" Some text here\n Some new line text here"
我需要得到它:
"----Some text here\n---Some new line text here"
这样,行开头的每个空格(字符串或换行符号)都会替换为dash。
不确定如何以最简单的方式实现它。
答案 0 :(得分:1)
请尝试以下操作:
> " Some text here\n Some new line text here".replace(/^\s+/gm, '----')
"----Some text here\m----Some new line text here"
或:
" Some text here\n Some new line text here".replace(/^\s+/gm, function(spaces) { return spaces.replace(/./g, '-'); } )
"----Some text here\m----Some new line text here"
答案 1 :(得分:1)
有一种方法可以使用后向匹配来分别匹配每个前导模式,但这是仅ECMAScript 2018+兼容的解决方案。
后备采用可以是tracked here,请参见 RegExp后置声明。 目前,Chrome,Edge,Opera(包括Opera Mobile),Samsung Internet和Node.js支持它们。 Firefox is adding "support for the dotAll flag, lookbehind references, named captures, and Unicode escape sequences"于2020年6月30日加入SpiderMonkey RegExp引擎。
当前方案的解决方案:
.replace(/(?<=^\s*)\s/gm, '-')
在这里,/(?<=^\s*)\s/gm
与行开头紧随其后的任何0+空格字符的任何空格字符(\s
)匹配(请参阅后面的(?<=^\s*)
正数)。参见this regex demo。
注意:由于\s
与换行符匹配,因此所有空行也将替换为连字符。如果必须保留空行,请使用[^\S\n\v\f\r\u2028\u2029
而不是\s
:
.replace(/(?<=^[^\S\n\v\f\r\u2028\u2029]*)[^\S\n\v\f\r\u2028\u2029]/gm, '-')
其中[^\S\n\v\f\r\u2028\u2029]
匹配除换行符,垂直制表符,换页符,回车符,行和段落分隔符以外的任何空格字符。参见this regex demo。
JS演示:
// Any whitespace chars
console.log(" Some text here\n\n Some new line text here"
.replace(/(?<=^\s*)\s/gm, '-'))
// Only horizontal whitespace
console.log(" Some text here\n\n Some new line text here"
.replace(/(?<=^[^\S\n\v\f\r\u2028\u2029]*)[^\S\n\v\f\r\u2028\u2029]/gm, '-'))