我正在尝试将帮助字符串(有点像Stack [enter link description here][1]
)保存到数据库中,并在检索/查看时将它们编译为HTML。示例文本是:
var str = 'This is just a sample text followed by an {{image: imageUrl1}}. And here is another {{image: imageUrl2}}.';
我尝试了以下RegEx:
str.match(`/(\{\{image:)[^(.*\}\})]*.*(\}\})/g`);
但我得到["{{image: imageUrl1}}. And here is another {{image: imageUrl2}}"]
。
RegEx模式应该是什么,结果是["{{image: imageUrl1}}", "{{image: imageUrl2}}"]
?
答案 0 :(得分:1)
正则表达式是贪婪的(匹配所有可能的结果以满足条件)。这意味着,正则表达式将匹配从{{
到最后}}
的字符串。要仅匹配第一个}}
符号,请在?
量词之后添加*
量词,使其变得懒惰。
/{{image:[^}]*?}}/g
此处在RegEx101上直播demo
<强>解释强>
{{image:
:匹配{{image:
文字[^}]*?
:除}
lazily }}
:匹配}}
文字请注意,通过反向标记围绕正则表达式使其成为字符串。使用正则表达式文字语法。
var str = 'This is just a sample text followed by an {{image: imageUrl1}}. And here is another {{image: imageUrl2}}.';
var matches = str.match(/{{image:[^}]*?}}/g);
console.log(matches);
&#13;
要提取URL,请使用捕获组并获取第一个捕获的组。
/{{image:\s*([^}]*?)}}/
var str = 'This is just a sample text followed by an {{image: http://someURLHERE.domain}}. And here is another {{image: imageUrl2}}.';
var regex = /{{image:\s*([^}]*?)}}/g;
var match = '';
var urls = [];
while (match = regex.exec(str)) {
urls.push(match[1]);
}
console.log(urls);
&#13;