簡體   English   中英

用於Markdown代碼塊外的HTML的正則表達式

[英]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>

我無法

  1. 得到一個支持多行html標簽的正則表達式,並
  2. 檢查html是否在markdown代碼塊之外。

我制作了一個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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM