我正在尝试修改包含一些特殊标记的文本。我相信它应该可以通过一个正则表达式,但我被卡住了......
我想做的更容易通过一个例子来解释:
如果我有这个文字:
{Lorem Ipsum}简直就是{虚文} 印刷和排版行业。
我希望结果如下:
<span>Lorem Ipsum</span> is <span>simply dummy</span> text of the printing and typesetting industry.
我遇到}
,之前没有匹配{
,那么应该忽略它。
我知道我可以将所有内部文本与此\{(.*?)\}
匹配,但如果继续进行,则会失去任何帮助。
答案 0 :(得分:6)
你很亲密。
text = text.replace(/{(.*?)}/g, '<span>$1</span>')
应该做的伎俩。 g
修饰符使replace
替换每种模式,$1
引用第一个捕获组的内容。
顺便说一下。由于{}
不是特殊构造,因此在此处不必转义{(.*?)}
。为了清楚起见,最好还是逃避它们。
有关MDN documentation中JavaScript中正则表达式的更多信息。
答案 1 :(得分:1)
更好的方法是匹配\{([^{}]*)\}
。这确保了只有最里面的一对支架匹配;不平衡的比赛是不可能的。
result = subject.replace(/\{([^{}]*)\}/g, "<span>$1</span>");
但是,如果可以嵌套括号,则必须多次应用。当然,它不会检查这些括号是否出现在评论,引号等中。
答案 2 :(得分:0)
var str = '{Lorem Ipsum} is simply {dummy text} of the printing and typesetting industry.';
var spanStr = str.replace(/{(.*?)}/g, '<span>$1</span>');