高亮显示包含<br>以及重新格式化网格

Highlighting a specific area of a grid containing <br> and reformatting the grid

本文关键字:网格 格式化 br 显示 包含 lt 高亮 gt      更新时间:2023-09-26

我有一个字符串,看起来像这个

16427171479924442928230863465674813919123162824586<br>17866458359124566529476545682848912883142607690042<br>2421902671055626321111109370544217506941658960408<br>07198403850962455444362981230987879927244284909188<br>

它实际上是一个没有换行符的网格(只有<br>,没有实际的换行符(''n))

16427171479924442928230863465674813919123162824586<br>
17866458359124566529476545682848912883142607690042<br>
24219022671055626321111109370544217506941658960408<br>
07198403850962455444362981230987879927244284909188<br>

我想在这个网格的某个部分加上粗体,这个部分每次都可以更改,在这个例子中,我想加上8617。(这个数字可能更长,延伸多条线,我的实际网格要大得多)

我希望它看起来像这样:

16427171479924442928230863465674813919123162824586
1786645835912456652976545682848912883142607690042
24219022671055626321111109370544217506941658960408
0719840385099624554443629812309878779927244284909188

我试过使用这个(maxStr是我想替换的数字字符串)

gridString.replace(maxStr, "<strong>" + maxStr + "</strong>")

但这不起作用,因为字符串中有<br>,所以我实际上必须替换的字符串是86<br>17

我的问题是:我如何用粗体替换跨越多行的数字的某一部分,同时将<br>保留在我需要的地方。

JSFiddle说明我的问题:https://jsfiddle.net/5d21c2r3/

附带说明:我尝试了一种解决方案,从网格中删除所有<br>,然后替换文本,然后每50个字符重新添加<br>,但这也不起作用,因为<strong></strong>最终添加了很多字符。

您可以制作一个正则表达式,允许在任意数字之间选择<br>

var toReplace = "8617";
var regex = new RegExp("(" + toReplace.split("").join("(?:<br>)?") + ")")
document.write(gridString.replace(regex, "<strong>$1</strong>"))

请参阅更新的JS Fiddle。

解释

生成的正则表达式是/(8(?:<br>)?6(?:<br>)?1(?:<br>)?7)/。CCD_ 11是非捕获组。?之后意味着它是可选的—它可以出现零次或一次。开头的(和结尾的)是捕获组—它允许您稍后将匹配的子字符串用作CCD_ 15。