Javascript:正则表达式替换两个字符及其周围的所有空格

时间:2017-11-20 09:14:48

标签: javascript regex string

我有一个字符串,想要替换这两个字符的所有实例"<"和">"连同其所有周围的空白(没有标签,没有新行,可能是空的)" < "和" > "分别。

  

我可以使用单行替换正则表达式吗?

缓慢而艰难的方式是

while (entry.value.indexOf(" <") > -1) {
    entry.value = entry.value.replace(" <","<");
}
while (entry.value.indexOf("< ") > -1) {
    entry.value = entry.value.replace("< ","<");
}
while (entry.value.indexOf(" >") > -1) {
    entry.value = entry.value.replace(" >",">");
}
while (entry.value.indexOf("> ") > -1) {
    entry.value = entry.value.replace("> ",">");
}
entry.value = entry.value.replace("<"," < ").replace(">"," > ");

Regex to replace multiple spaces with a single space解释了缩短空白,但我不假设这两个字符周围有空格。

我使用的用例是将数学表达式保存在数据库中,以便使用MathJax在网站上显示。这样做可以解决这个问题,请参阅http://docs.mathjax.org/en/latest/tex.html#tex-and-latex-in-html-documents

典型的表达式是

"Let $i$ such that $i<j$..."
"Let $<I>$ be an ideal in..."

(后者甚至不会在正常文本模式的预览中渲染。)

1 个答案:

答案 0 :(得分:1)

在此复制粘贴Wiktor的评论。 \s匹配任何空格字符,*表示匹配0个或更多空白字符,[<>]匹配任何<>g } flag表示执行全局替换而不是仅替换第一个匹配,括号是创建一个捕获组,以便我们可以使用$1将匹配作为替换字符串中的反向引用。

请参阅下面的一些示例输入输出。

'<>' // => ' <  > ' (two spaces between the carets)
'<\t\t\n\ \n<' // => ' <  < ' (again two spaces)
'>a     \t b<    ' // => ' > a     \t b < '
'a>\n   b   <c    ' // => 'a > b < c    '

a = 'fpo<  \n>\naf      ja\tb<>\t<><>asd\npfi b.<< >    >';
b = a.replace(/\s*([<>])\s*/g, ' $1 ');

console.log(b);