2017-02-17 54 views
-2

我試圖把HTML字符串是這樣的:如何使用正則表達式替換<i>元素與同一元素內的屬性值?

I'm extra <i data-emoji=":)" class="emoji emoji-happy"></i> today!

,並返回只有這個:

我額外:)今天!

我爲此使用Javascript。

這是我正在做它至今:

const emojiRegex = /<i\s.*data-emoji="(.*?)".*\/i>/ 
    const matches = data.match(emojiRegex) 
    const fixed = matches && matches.length > 0 
     ? data.replace(matches[0], matches[1]) 
     : data 

    return fixed 

它的工作,但我想知道是否有這樣做的更好的,更安全的方式。我的正則表達式模式的第一個變體包括檢查引號內的非字母數字字符,比如data-emoji =「(\ W *?)」,但是我也可能得到字符串:S或類似的東西,所以我改變了它爲「(。*?)」,但恐怕會出現這種情況,可能會失敗。

任何人都知道更好,更安全的方式?

+0

在語言,你想解決? JavaScript或ecmascript? –

+1

沒關係,也許可以將你的'。* \/i>'改成'。*?\/i>',這樣你的文字 – Fallenhero

回答

1

我只會改變小事情,但你的js代碼看起來太複雜了,你就不能

data = 'Im extra <i data-emoji=":)" class="emoji emoji-happy"></i> today! But was like <i data-emoji=":(" class="emoji emoji-unhappy"></i> yesterday.'; 
 
console.log(data.replace(/<i.*?data-emoji="(.*?)".*?\/i>/g, '$1'));

+0

就可以有多個emojis了!我知道必須有一種更簡單的方式......謝謝@Fallenhero – andrux

相關問題