簡體   English   中英

RegEx用於特定模式,不包括URL

[英]RegEx for specific pattern, excluding URLs

很長一段時間,但我需要使用一些偽造的HTML並使用JavaScript將其替換為真實的HTML。 例如:

{span class:text-bold data:attribute}TITLE{/span}

需要變成:

<span class="text-bold" data="attribute">TITLE</span>

我正在使用RegEx執行此操作,因為我不可能預期可以放在每個元素上的每個屬性。 表達式或多或少地用於查找每個數據實例:屬性:

/(\w+\:)(.[^\s\}]*)/g

但是,有一個問題; 此表達式還匹配URL,例如:

http://www.google.ca

為了排除任何匹配的URL,我改變了表達式,如下所示:

/(?!http)(\w+\:)(.[^\s\}]*)/g

但是,這沒有預期的效果,模式繼續匹配URL,只是沒有前導'h'。 例如,

ttp://www.google.ca

我承認我很久沒有使用過RegEx了,所以我可能會誤解一些東西。 如何判斷RegEx模式與任何以特定字符集開頭的匹配不匹配?

在可能的//之前,即在冒號之后,你需要一個否定的前瞻。

"foo://bar".match(/(\w+:)(?!\/\/)([^\s\}]*)/); //no dice
"foo:bar".match(/(\w+:)(?!\/\/)([^\s\}]*)/); //dice

當然,這也會阻止任何以//合法開頭的屬性值,但我認為這是值得冒的風險。

我會使用嵌套在regex-replace的handler-function中的正則表達式:

 document.getElementById('outp').value = document.getElementById('inp').value.replace( /{([^}]+)}/g, function(m, tag) { return '<' + tag.replace(/(\\w+):(\\S+)/g, '$1="$2"') + '>'; }); 
 textarea { width:100%; } 
 <textarea id="inp" rows="5">{span class:text-bold data:attribute}TITLE{/span} http://www.google.ca</textarea> <textarea id="outp" rows="5"></textarea> 

第一個正則表達式{([^}]+)}抓取{}之間的所有實例和內部函數只能與這些匹配一起使用,因此任何其他冒號都保持不變。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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