正则表达式匹配括号正则表达式内的引号

时间:2015-03-19 12:30:21

标签: javascript regex

我正在制作一个正则表达式,它必须只匹配引号内的文本但不能在注释中匹配,我的macthes必须只有粗体字符串

  

<的 “爱”;>

     

> / * “爱” * /<

     

<>的 '爱'<>

     

“LO

     

更多爱

     

已经“

我很震惊:

/(?:((\"|\')(.|\n)*?(\"|\')))(?=(?:\/\**\*\/))/gm

第一个(?:((\"|\')(.|\n)*?(\"|\')))匹配所有字符串 第二个(?=(?:\/\**\*\/))/* "mystring" */

中的引号内的文字不匹配

我的逻辑是清楚的错误

有什么建议吗?

由于

2 个答案:

答案 0 :(得分:2)

也许您只需要使用否定前瞻来检查评论结束*/

但首先,我将字符串拆分为单独的行

 var arrayOfLines = input_str.split(/\r?\n/);

或没有空行:

 var arrayOfLines = input_str.match(/[^\r\n]+/g);

然后使用this regex

["']([^'"]+)["'](?!.*\*\/)

示例代码:

var rebuilt_string = ''
var re = /["']([^'"]+)["'](?!.*\*\/)/g; 
var subst = '<b>$1</b>'; 

for (i = 0; i < arrayOfLines.length; i++)
{
   rebuilt_string = rebuilt_string + arrayOfLines[i].replace(re, subst) + "\r\n";
}

答案 1 :(得分:0)

避免评论部分的方法是先匹配它们。全球模式如下:

/(capture parts to avoid)|target/

然后使用回调函数进行替换(当捕获组存在时,返回匹配而不做更改,否则,将匹配替换为您想要的匹配。

示例:

var result = text.replace(/(\/\*[^*]*(?:\*+(?!\/)[^*]*)*\*\/)|"[^"\\]*(?:\\[\s\S][^"\\]*)*"|'[^'\\]*(?:\\[\s\S][^'\\]*)*'/g,
    function (m, g1) {
        if (g1) return g1;
        return '<b>' + m + '</b>';
});