Javascript 识别正则表达式中的多组开始标记、正文和结束标记
我正在尝试开发一个函数,将[bold]…[/bold]转换为。。。为我的论坛。到目前为止,当只有一组[bold]…[/bold]时,这种方法非常有效,但是,每当添加第二组[bold]时,正则表达式直到第二组[bold]才识别第一个[bold]的结尾 举例来说,如果我把“[bold]你好[/bold],你[bold]今天好吗[/bold]?”,我应该得到: 你好,今天好吗 然而,我实际上得到的是: 你好,今天好吗 以下是我目前的职能:Javascript 识别正则表达式中的多组开始标记、正文和结束标记,javascript,regex,Javascript,Regex,我正在尝试开发一个函数,将[bold]…[/bold]转换为。。。为我的论坛。到目前为止,当只有一组[bold]…[/bold]时,这种方法非常有效,但是,每当添加第二组[bold]时,正则表达式直到第二组[bold]才识别第一个[bold]的结尾 举例来说,如果我把“[bold]你好[/bold],你[bold]今天好吗[/bold]?”,我应该得到: 你好,今天好吗 然而,我实际上得到的是: 你好,今天好吗 以下是我目前的职能: function formatBolds(str) {
function formatBolds(str) {
output = output.replace(/(\[bold\])(.*)(\[\/bold\])/g, "<b>$2</b>");
}
函数格式bolds(str){
输出=输出。替换(/(\[bold\])(.*)(\[\/bold\])/g,“$2”);
}
将*
更改为非贪婪*?
function formatBolds(str) {
output = output.replace(/(\[bold\])(.*?)(\[\/bold\])/g, "<b>$2</b>");
}
函数格式bolds(str){
输出=输出。替换(/(\[bold\])(.*)(\[\/bold\])/g,“$2”);
}
的问题在于它贪婪,试图匹配尽可能多的字符,包括第一个*
和后面的[/bold]
直到最后一个[bold]
。[/bold]
使其非贪婪,并在最小长度匹配处停止匹配?
*
更改为非贪婪*?
function formatBolds(str) {
output = output.replace(/(\[bold\])(.*?)(\[\/bold\])/g, "<b>$2</b>");
}
函数格式bolds(str){
输出=输出。替换(/(\[bold\])(.*)(\[\/bold\])/g,“$2”);
}
的问题在于它贪婪,试图匹配尽可能多的字符,包括第一个*
和后面的[/bold]
直到最后一个[bold]
。[/bold]
使其非贪婪,并在最小长度匹配处停止匹配?
(\[bold\])(.*?)(\[\/bold\])
我认为使用非贪婪匹配可以解决您的问题:
(\[bold\])(.*?)(\[\/bold\])
“贪婪”通常意味着正则表达式将尝试进行最左边、最长的匹配。“贪婪”通常意味着正则表达式将尝试进行最左边、最长的匹配。