Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 正则表达式将字符串替换为美元符号,输出怪异_Javascript_Regex - Fatal编程技术网

Javascript 正则表达式将字符串替换为美元符号,输出怪异

Javascript 正则表达式将字符串替换为美元符号,输出怪异,javascript,regex,Javascript,Regex,我使用如下javascript函数将html blockquote转换为markdown blockquote: function convertBlockquote(str) { var r = str; var pat = /<blockquote>\n?([\s\S]*?)\n?<\/blockquote>/mi; //[\s\S] = dotall; ? = non-greedy match for (v

我使用如下javascript函数将html blockquote转换为markdown blockquote:

    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;
    }
函数convertBlockquote(str){
var r=str;
var pat=/\n?([\s\s]*?)\n?/mi;//[\s\s]=dotall;?=非贪婪匹配
for(var mat;(mat=r.match(pat))!==null;){
mat=mat[1]
.替换(/\n/gm,“\n>”)
.替换(//igm,“\n>”)
.replace(//igm,“\n>\n>”)
.replace(/(\n>?){3,}/gm,“\n>\n>”);
r=r.替换(轻拍,'\n>'+mat+'\n');
}
返回r;
}
因此,如果我传入:
价格:$1000加税。

我希望:
>价格:$1000加税。

但我得到:
>价格:价格:$1000加税。000加税。

注意它是如何用整个原始字符串替换字符串中$1000部分的
$1

如何转义或更新函数以处理此问题(以及可能导致类似问题的其他特殊字符)?

:

可以将函数指定为第二个参数。在这种情况下,将在执行匹配后调用该函数。函数的结果(返回值)将用作替换字符串。(注意:上述特殊更换模式不适用于这种情况。)

这样你就可以写作了

r = r.replace(pat, function () { return '\n>' + mat + '\n'; });

我是否遗漏了一些明显的东西,或者实现看起来很复杂

我就是这样做的:

str=str.replace(/<blockquote>(.*?)<\/blockquote>/g,'> $1')
str=str.replace(/(.*?)/g,“>$1”)
如果您希望匹配多行引号:

str=str.replace(/<blockquote>((.|\n)*?)<\/blockquote>/g,'> $1')
str=str.replace(/(.|\n)*?)/g'>$1')

你正在寻找,即摆脱标记吗?不,这是用“降价”语法替换某些html标记的基本方法。这是一个非常简单的例子,只是为了说明发生了什么。这是一个基本函数,用于用内容的降价格式版本替换blockquote标记及其内容。额外的“并发症”用于处理单行以外的情况。@robar编辑以处理换行符。