[英]Regex match quotes inside bracket regex
我正在研究一种仅与引号内的文本匹配但不能与注释匹配的正则表达式,我的Macthes必须仅以粗体显示字符串
< “爱” ;>
> / * “爱” * / <
<> '爱' <>
“LO
更多的爱
已经”
我对此感到震惊:
/(?:((\"|\')(.|\n)*?(\"|\')))(?=(?:\/\**\*\/))/gm
第一个(?:((\\"|\\')(.|\\n)*?(\\"|\\')))
匹配所有字符串,第二个(?=(?:\\/\\**\\*\\/))
与/* "mystring" */
引号内的文本不匹配/* "mystring" */
我的逻辑很明显是错误的
有什么建议吗?
谢谢
也许您只需要使用负数前瞻检查注释结尾*/
?
但是首先,我将字符串分成几行
var arrayOfLines = input_str.split(/\r?\n/);
或者,没有空行:
var arrayOfLines = input_str.match(/[^\r\n]+/g);
然后使用此正则表达式 :
["']([^'"]+)["'](?!.*\\*\\/)
样例代码:
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";
}
避免注释部分的方法是先对其进行匹配。 全局模式如下所示:
/(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>';
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.