我使用javascript函数如下将html blockquote转换为markdown blockquote:
flex-direction: row-reverse
所以,如果我传入: function convertBlockquote(str) {
var r = str;
var pat = /<blockquote>\n?([\s\S]*?)\n?<\/blockquote>/mi; //[\s\S] = dotall; ? = non-greedy match
for (var mat; (mat = r.match(pat)) !== null; ) {
mat = mat[1]
.replace(/\n/gm, '\n> ')
.replace(/<p>/igm, '\n> ')
.replace(/<\/p>/igm, '\n> \n> ')
.replace(/(\n> ?){3,}/gm, '\n> \n> ');
r = r.replace(pat, '\n>' + mat + '\n');
}
return r;
}
我希望:<blockquote>Price: $1000 plus tax.</blockquote>
但我得到:> Price: $1000 plus tax.
注意它是如何用整个原始字符串替换字符串的$ 1000部分中的> Price: Price: $1000 plus tax.000 plus tax.
?
如何逃避此操作或更新函数来处理此问题(以及可能导致类似问题的其他特殊字符)?
答案 0 :(得分:1)
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/replace:
您可以将函数指定为第二个参数。在这种情况下,将在执行匹配后调用该函数。函数的结果(返回值)将用作替换字符串。 (注意:在这种情况下,上述特殊替换模式不适用。)
所以你可以写
r = r.replace(pat, function () { return '\n>' + mat + '\n'; });
答案 1 :(得分:0)
我是否遗漏了一些明显或实施看起来很复杂的事情?
我就是这样做的:
str=str.replace(/<blockquote>(.*?)<\/blockquote>/g,'> $1')
如果您希望匹配多行引号:
str=str.replace(/<blockquote>((.|\n)*?)<\/blockquote>/g,'> $1')