我有一个看起来像这样的字符串
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>
最终会添加很多字符。
答案 0 :(得分:6)
你可以制作一个允许在任意数字之间选择<br>
的正则表达式:
var toReplace = "8617";
var regex = new RegExp("(" + toReplace.split("").join("(?:<br>)?") + ")")
document.write(gridString.replace(regex, "<strong>$1</strong>"))
产生的正则表达式为/(8(?:<br>)?6(?:<br>)?1(?:<br>)?7)/
。 (?:)
是一个非捕获组。 ?
之后意味着它是可选的 - 它可以显示为零或一次。开头的(
和结尾的)
是一个捕获组 - 它允许您稍后将匹配的子字符串用作$1
。