如何在DOM中查找字符串并通过php或jQuery进行更改
我有一个html文本,如下所示:如何在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
<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)
}
})