[英]Regex for HTML outside markdown code block
我有一個包含一些降價的文本區域。 我不希望用戶在其中發布html,除非它位於markdown代碼塊之內,例如
``` someLanguageCode
<span>some html inside markdown code block</span>
```
我不想在markdown代碼塊之外允許任何html。 因此,這將是非法的:
<span>some html tag outside code block</span>
<div>some more multiline html code outside
</div>
``` someLanguageCode
<span>some html inside markdown code block</span>
```
我能夠獲得單行html標簽的正則表達式。 <([a-zA-Z][a-zA-Z0-9]*)\\b[^>]*>(.*?)<\\/\\1>
我無法
我制作了一個jsfiddle來解決這個問題,該問題表明應該匹配或應拒絕的對象。
我這樣做是為了避免明顯的XSS注入。
正如評論中已經提到的那樣,您不應嘗試使用正則表達式來解析整個HTML。 我認為您只想最后剝離標簽並將其標記為無效。 我創建了一個jsfiddle ,在其中放置了一些代碼來解析結構,並使您可以將代碼應用於markdown區域或外部:
var valid = '``` someLanguageCode'+
'<span>some html inside markdown code block</span>'+
'```'; // Valid string
var broken = '``` someLanguageCode'+
'<span>some html inside markdown code block</span>'; //Markdown not closed (broken string)
var not_valid = '<span>Me is outside.</span>'+
'``` someLanguageCode'+
'<span>some html inside markdown code block</span>'+
'```'; // Not valid string
var s = not_valid; //Change this to test
document.getElementById('code').innerHTML = check_html_in_markdown(s);
function check_html_in_markdown(s){
s = s.split(/```/);
//Check if markdown blocks are closed correctly
var is_broken = false;
if(s.length % 2 == 0){ //odd number of markdown ``` means not closed
is_broken = true;
alert('Markown is broken');
}
if(!is_broken){
var in_markdown = false;
for(var i in s){
in_markdown = i % 2 == 1;
if(!in_markdown){
//Code to find HTML-Tags and replace them
s[i] = s[i].replace(/<[a-z\/][^>]*>/g, ' **Your replacement** ');
} else {
//Here you can do nothing or check with a HTML-Parser if there is valied HTML
}
}
}
return s.join('```');
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.