我想用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)
。
在这种情况下我需要什么正则表达式?
答案 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');