我正在制作一个正则表达式,它必须只匹配引号内的文本但不能在注释中匹配,我的macthes必须只有粗体字符串
<的 “爱”;>
> / * “爱” * /<
<>的 '爱'<>
“LO
更多爱
已经“
我很震惊:
/(?:((\"|\')(.|\n)*?(\"|\')))(?=(?:\/\**\*\/))/gm
第一个(?:((\"|\')(.|\n)*?(\"|\')))
匹配所有字符串
第二个(?=(?:\/\**\*\/))
与/* "mystring" */
我的逻辑是清楚的错误
有什么建议吗?
由于
答案 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>';
});