用于字符串中的注释,注释中的字符串等的正则表达式

时间:2014-08-20 10:11:03

标签: regex string comments

这个问题我已经解决并希望以Q& A风格发布,因为我认为更多人可以使用该解决方案。或者可以改进解决方案,显示它的中断位置。

问题

您想在文本正文中使用引用的字符串和/或注释执行某些操作。你想要提取它们,突出它们,你有什么。但是一些引用的字符串在注释中,有时注释字符在字符串内。字符串分隔符可以转义,注释可以是行注释或阻止注释。当你认为你有一个解决方案时,有人抱怨说,当他的JavaScript中存在正则表达式时,它不起作用。怎么办?

具体示例

var ret = row.match(/'([^']+)'/i); // Get 1st single quoted string's content
if (!ret) return ''; /* return if there's no matches 
                        Otherwise turn into xml: */
var message = '\t<' + ret[1].replace(/\[1]/g, '').replace(/\/@(\w+)/i, ' $1=""') + '></' + ret[1].match(/[A-Z_]\w*/i)[0] + '>';

alert('xml: \'' + message + '\''); /*
alert("xml: '" + message + "'"); // */

var line = prompt('How do line-comments start? (e.g. //)', '//');

// do something with line

这段代码是无稽之谈,但我如何在上述JavaScript的每个案例中做正确的事情?

我发现的唯一接近的是:Comments in string and strings in comments Jan Goyvaerts本人以类似的方式回答。但那个人还没有处理撇号逃脱。

1 个答案:

答案 0 :(得分:2)

我已经将正则表达式分解为4行,与图中的4个路径相对应,如果你曾经使用过,请不要在那里保留这些换行符。

(['"])(?:(?!\1|\\).|\\.)*\1|
\/(?![*/])(?:[^\\/]|\\.)+\/[igm]*|
\/\/[^\n]*(?:\n|$)|
\/\*(?:[^*]|\*(?!\/))*\*\/

Regular expression visualization

Debuggex Demo

这段代码抓住了4种类型的“块”,可以包含另外3种。你可以遍历这个并随意做任何你想做的事情或丢弃它,因为它不是你想做的任何事情。

这个特定于JavaScript,因为它是我熟悉的语言。但是你可以很容易地根据你喜欢的语言进行调整。

任何人都会看到此代码中断的方式?

编辑 此后我收到通知,说明了一般模式:https://stackoverflow.com/a/23589204/2684660,neato!