如何在DOM中查找字符串并通过php或jQuery进行更改

如何在DOM中查找字符串并通过php或jQuery进行更改,php,jquery,html,Php,Jquery,Html,我有一个html文本,如下所示: <blockquote> <p> Je suis un gros [b][u]Zéro[/u][/b], et pourtant j'ai [i]tout appris[/i] sur http://www.siteduzero.com<br /> Je vous [b][color=green]recommande[/color][/b] d'aller sur ce site, vo

我有一个html文本,如下所示:

<blockquote>
    <p>
        Je suis un gros [b][u]Zéro[/u][/b], et pourtant j'ai [i]tout appris[/i] sur http://www.siteduzero.com<br />
        Je vous [b][color=green]recommande[/color][/b] d'aller sur ce site, vous pourrez apprendre à faire ça [i][color=purple]vous aussi[/color][/i] !
        [img]zozor_404.png[/img]
    </p>
</blockquote>
我想要的是,在:

找到每个[然后在其前面添加, 找到每个]然后在其后面添加, 这使得html类似于:

Je suis un gros <b>[b]</b><b>[u]</b>Zéro<b>[/u]</b><b>[/b]</b> ...  
似乎jQuery可以通过$map实现,PHP可以通过preg_匹配实现

有什么办法吗?

试试这个:

编辑


少一点代码:

您的JS jQuery文件代码可能如下所示:

// Gets text from p
var myText = $("p").text()
// Splits text into array
var myTextSplit = myText.split("");
// Copy array of splits into new one so we can manipulate
var myDesiredText = myTextSplit.slice()
// Create a final output variable
var output = ""
// Offset additions variable - for loop
var additions = 0
// For loop to create output text
$(myTextSplit).each(function(index, element){
    if (element == "[") {
        myDesiredText.splice(index + additions, 0, "<b>");
        additions++
    }
    if (element == "]") {
        myDesiredText.splice(index + 1 + additions, 0, "</b>");
        additions++
    }
    // We also need to check when the loop is done to join array into text
    if (index == myTextSplit.length - 1 ) {
        output = myDesiredText.join("")
        // Change text to output
        $("p").text(output)
    }
})

如果这是一个简单的规则,您甚至可以在首选preg_匹配的情况下使用str_替换-只需阅读PHP官方网站上关于regex模式的手册,就可以更好地了解它的工作原理。谢谢,这很好。只有一个问题:为什么/\[.*?\]/ig需要放*和?在一起因为*表示0、1或无限次,应该匹配[u]或[/u],但我尝试了这个,它不需要[/u],为什么?您需要转义某些字符,比如[or/?。这不是贪婪。Puting\before已经用于转义特殊字符,在这种情况下,我们已经转义了[and],当没有?时,正则表达式是贪婪的;当有?时,正则表达式是懒惰的;当有?时,正则表达式是懒惰的,因为什么?谢谢你的耐心。我不太理解你的问题,我想。如果你让正则表达式贪婪,它会抓住第一个[和最后一个]之间的所有东西,看到了吗。我试过正则表达式,没有?,像这样:/\[.*\]/ig,它只抓取[b]、[u],但既不抓取[b]也不抓取[u],当我添加?时,它是有效的。所以你告诉我添加?是为了转义某些字符,但\is已经这么做了,这就是为什么我不明白?在这里,它将转义函数加倍。我从未见过将两个量词放在一起,所以当它们在一起时,正则表达式变得懒惰,以便它可以抓取[]的每一对,而不是第一对[最后一点],是这样吗?
// Gets text from p
var myText = $("p").text()
// Splits text into array
var myTextSplit = myText.split("");
// Copy array of splits into new one so we can manipulate
var myDesiredText = myTextSplit.slice()
// Create a final output variable
var output = ""
// Offset additions variable - for loop
var additions = 0
// For loop to create output text
$(myTextSplit).each(function(index, element){
    if (element == "[") {
        myDesiredText.splice(index + additions, 0, "<b>");
        additions++
    }
    if (element == "]") {
        myDesiredText.splice(index + 1 + additions, 0, "</b>");
        additions++
    }
    // We also need to check when the loop is done to join array into text
    if (index == myTextSplit.length - 1 ) {
        output = myDesiredText.join("")
        // Change text to output
        $("p").text(output)
    }
})