正则表达式匹配markdown图像模式与给定的文件名

时间:2013-11-21 17:45:47

标签: javascript regex

我想用textarea中的给定文件名替换带有空字符串的markdown图像模式。

因此模式为![alt](http://somehost/uploads/filename.jpg)

这是我现在的代码:

var content = target.val();
var fileName = someDynamicValue;

var regex = new RegExp(RegExp.escape('![') + '.*' + RegExp.escape(']') + RegExp.escape('(') + '.*' + RegExp.escape(fileName) + RegExp.escape(')'), 'i');
var found = regex.exec(content);

var newContent = content.replace(regex, "");
target.val(newContent);

RegExp.escape= function(s) {
    return s.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&')
};

例如var fileName = filename.jpg。然后我需要匹配![alt](http://somehost/uploads/filename.jpg)并将其替换为空字符串。

如果content包含一张图片,那么一切都很有效。但如果有更多,例如:

  

一些文字![alt](http://somehost/uploads/filename.jpg)一些文字![alt2](http://somehost/uploads/filename2.jpg)更多文字。

然后var found包含![alt](http://somehost/uploads/filename.jpg)![alt2](http://somehost/uploads/filename2.jpg),但我只需匹配![alt](http://somehost/uploads/filename.jpg)

在这种情况下我需要什么正则表达式?

1 个答案:

答案 0 :(得分:0)

不确定你是如何试图把弦放在一起但是 '.*'贪婪地匹配最后的文件名。
所以,应该是'.*?'

但是,如果文件名不同,则它不应该匹配 另一件事是你通常应该阻止它跑过下一个[alt]和 像'[^\[\]]*'

这样的东西

修改:

RegExp.escape('![')+ '.*' + RegExp.escape(']')+ RegExp.escape('(')+'。*'+ RegExp.escape(fileName)+ RegExp .escape(')'),'i');

是罪魁祸首。

尝试

RegExp.escape('![') + '[^\]]*' + RegExp.escape(']') + RegExp.escape('(') + '[^\[\]]*?' + RegExp.escape(fileName) + RegExp.escape(')'), 'i');