我正在尝试做一个修改包含一些特殊标签的文本。我相信这应该可以通过一个正则表达式,但我卡住了…
我想要做的事情更容易用一个例子来解释:
如果我有这样的文本:
{Lorem Ipsum}只是印刷和排版行业的{虚拟文本}。
我想要的结果是:
<span>Lorem Ipsum</span> is <span>simply dummy</span> text of the printing and typesetting industry.
如果遇到之前没有匹配{
的}
,则应该忽略它。
我知道我可以匹配所有的内部文本与这个\{(.*?)\}
,但迷失了如何继续,任何帮助将是值得的。
发布于 2011-07-07 18:21:39
你已经很接近了。
text = text.replace(/{(.*?)}/g, '<span>$1</span>')
应该能行得通。g
修饰符使replace
替换模式的每个匹配项,$1
引用第一个捕获组的内容。
顺便说一句。这里没有必要转义{}
,因为{(.*?)}
不是一个特殊的构造。为了清晰起见,还是避开它们可能会更好。
有关MDN documentation中JavaScript中的正则表达式的更多信息。
发布于 2011-07-07 18:23:49
更好的方法是匹配\{([^{}]*)\}
。这确保了只匹配最里面的大括号对;这种不平衡的匹配是不可能的。
result = subject.replace(/\{([^{}]*)\}/g, "<span>$1</span>");
但是,如果可以嵌套大括号,则必须多次应用此方法。当然,它不会检查这些大括号是否出现在注释、引号等中。
发布于 2011-07-07 18:21:55
var str = '{Lorem Ipsum} is simply {dummy text} of the printing and typesetting industry.';
var spanStr = str.replace(/{(.*?)}/g, '<span>$1</span>');
https://stackoverflow.com/questions/6609063
复制相似问题