突出显示包含<br>的网格的特定区域并重新格式化网格

Kea*_*nge 7 javascript regex jquery

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

16427171479924442928230863465674813919123162824586<br>17866458359124566529476545682848912883142607690042<br>2421902671055626321111109370544217506941658960408<br>07198403850962455444362981230987879927244284909188<br>
Run Code Online (Sandbox Code Playgroud)

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

16427171479924442928230863465674813919123162824586<br>
17866458359124566529476545682848912883142607690042<br>
24219022671055626321111109370544217506941658960408<br>
07198403850962455444362981230987879927244284909188<br>
Run Code Online (Sandbox Code Playgroud)

我想加粗这个网格的某个部分,每次都可以改变,这个例子让我说要粗体8617.(这个数字可以更长,拉伸多行,我的实际网格要大得多)

我希望它看起来像这样:

164271714799244429282308634656748139191231628245 86
17 866458359124566529476545682848912883142607690042
24219022671055626321111109370544217506941658960408
07198403850962455444362981230987879927244284909188

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

gridString.replace(maxStr, "<strong>" + maxStr + "</strong>")
Run Code Online (Sandbox Code Playgroud)

但这不起作用,因为字符串包含<br>在其中,所以我实际需要替换的字符串是86<br>17

我的问题是:如何在保持<br>我需要它的地方的同时,用粗体版本替换延伸到多行的数字的某一部分.

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

附注:我想一个解决方案,我删除了所有<br>从我的网格,然后替换的文本,然后重新添加<br>每50个字符,但没有工作,要么是因为<strong></strong>最终加入了很多字.

Mic*_*ski 6

你可以制作一个允许<br>任意数字之间可选的正则表达式:

var toReplace = "8617";

var regex = new RegExp("(" + toReplace.split("").join("(?:<br>)?") + ")")

document.write(gridString.replace(regex, "<strong>$1</strong>"))
Run Code Online (Sandbox Code Playgroud)

查看更新的JS Fiddle.

说明

产生的正则表达式是/(8(?:<br>)?6(?:<br>)?1(?:<br>)?7)/.(?:)是一个非捕获组.?在它意味着它是可选的 - 它可以出现零次或一次.将(在开始和)结束时是捕获组-它可以让你在后面将要使用匹配的子字符串$1.