支架内的正则表达式匹配的正则表达式的报价

问题描述:

我工作的一个正则表达式必须只引号内而不是在注释文本匹配,我macthes只能在大胆支架内的正则表达式匹配的正则表达式的报价

< “爱”的字符串 ;>

>/* “爱” */<

<>'爱' <>

“LO

更多的爱

已经”

我stunck这个:

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

第一个(?:((\"|\')(.|\n)*?(\"|\')))匹配所有的字符串 ,引号里的第二个(?=(?:\/\**\*\/))不匹配文本/* "mystring" */

一下我的逻辑里是克利错误

什么建议吗?

感谢

+0

您能告诉我一个ie吗? – Morticella 2015-03-19 12:44:53

避免评论部分的方法是在之前匹配它们。全球格局是这样的:

/(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>'; 
}); 
+0

非常感谢正则表达式的完美,并且我更了解正则表达式的逻辑。再次感谢 – Morticella 2015-03-19 12:54:11

+0

@Morticella:单引号没有问题,刷新页面。 – 2015-03-19 13:06:40

+0

是的你是对的完美 – Morticella 2015-03-19 13:12:12

也许你只需要使用负前瞻检查注释结束*/

但首先,我会分割字符串分成几行

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"; 
} 
+0

'(“|')([^''] +)(”|')(?!\ * \ /(。我改变了一点正则表达式,但它仍然匹配注释中的字符串 – Morticella 2015-03-19 12:43:27

+0

我宁愿先分割多行输入,然后应用'['']([^' “] +)[''](?!。* \ * \ /)'正则表达式。但是,您已经从C&H得到了一个适合您的答案 – 2015-03-19 13:36:27