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

时间:2016-05-07 01:12:28

标签: javascript jquery regex

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

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

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

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

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

我希望它看起来像这样:

164271714799244429282308634656748139191231628245的 86
17 866458359124566529476545682848912883142607690042
24219022671055626321111109370544217506941658960408个
07198403850962455444362981230987879927244284909188

我尝试使用它(maxStr是我要替换的数字字符串)

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

但由于字符串中包含<br>,因此无法正常工作,因此我实际需要替换的字符串是86<br>17

我的问题是:如何在保持<br>所需位置的同时,用粗体版本替换多行中的某些数字。

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

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

1 个答案:

答案 0 :(得分:6)

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

var toReplace = "8617";

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

document.write(gridString.replace(regex, "<strong>$1</strong>"))

请参阅updated JS Fiddle

说明

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