2013-08-21 75 views
3

我需要在HTML標籤中包裝數字而不影響屬性。在HTML標籤中查找數字的正則表達式

到目前爲止,所有我能得到的是選擇什麼是標籤內只,數字和非數字字符太:(

這裏的正則表達式我使用的是:

/([0-9]+(?:\.[0-9]*)?)/g

Here's the code at RegExr

我將使用jQuery來分析它。This is the closest I could get jsfiddle

如何讓這個正則表達式僅用於html標籤內部的數字?

感謝您的幫助。

+14

[不要使用正則表達式。](http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags)使用DOM解析器並遍歷文本節點 - 然後僅在這些節點上應用替換。 –

+1

**不要使用正則表達式來解析HTML。使用合適的HTML解析模塊**您無法可靠地使用正則表達式解析HTML,並且您將面臨悲傷和挫折。只要HTML從你的期望改變,你的代碼就會被破壞。有關如何使用已經編寫,測試和調試的PHP模塊正確解析HTML的示例,請參閱http://htmlparsing.com/php。 –

+0

猜猜它可能更精確。如何指示jQuery只查看文本節點?這可能會使正則表達更有效。 –

回答

0

這將選擇html標籤內唯一的數字:

[0-9]+(?:\.[0-9]*)|(?<=^|>)\d+(?=<|$) 

這正則表達式是從您提供的鏈接編輯。它也適用於多行文本。

(?!<[A-Z][A-Z0-9]*\b[^><]*>[^><0-9]*)([0-9]+)(?=[^><0-9]*<) 

您可以測試它here

但是請注意,<html><body>標籤將符合您要求的模式,所以當您通過此正則表達式運行完整的html文檔時,大部分或全部數字都會匹配。所以,現在它只能運行在身體的元素,而不是整個文件

$('body').each(function() { 
    $(this).html(function(i, v) { 
     return v.replace(/(?!<[A-Z][A-Z0-9]*\b[^><]*>[^><0-9]*)([0-9]+)(?=[^><0-9]*<)/gim, '<span>$1</span>'); 
    }); 
}); 

測試上jsfiddle你的代碼我改成了這一點。這是否給出了預期的結果?

+0

同樣,它仍然不會僅選擇數字。 –