JavaScript 正则表达式,用于在“注释”代码中查找模式
JavaScript regular expression to find pattern in "commented" code
我有存储在字符串中的JavaScript片段。例如,我需要查看字符串,确定它们是否包含特定的代码"special[i].code"。
我只关心特定代码是否没有被注释掉。如果它找到未注释的代码,我需要返回一个 true 值,或者只返回位置。
存储在字符串中的示例代码段。
function someFunction() {
special[i].code
}
RegEx returns: True (Contains uncommitted occurrence)
function someFunction() {
// special[i].code
}
RegEx returns: False (Occurrence commented out)
function someFunction() {
/*
special[i].code
morecode();
*/
}
RegEx returns: False (Occurrence commented out)
function someFunction() {
/* special[i].code */
special[i].code
}
RegEx returns: True (Contains uncommitted occurrence)
我对正则表达式的了解不足以构建正确的表达式。尝试使用编辑器,但由于//和/* 本身是保留字符,即使我转义它们,我也无法让它正确检测。即使我尝试做类似//'' 或//* 的事情。
任何帮助将不胜感激!!
你可以使用它。
(注意 - 这是特定于JavaScript的)
注释的困境是你也必须
匹配字符串因为注释部分可以嵌入到字符串中。
鉴于您最终匹配了注释、字符串、非注释和
非注释,您希望匹配您的特殊代码。
可能是您想单匹配所有内容
的情况直到找到您的特殊代码。然后你会有一个匹配
导致真/假。
你会这么想,并且可以设置一个正则表达式来做到这一点......
但是,如果未找到匹配项,这将导致复杂性问题。
所以,最终发生的事情是,你必须坐在一个循环中,得到所有的
部分,直到没有更多的匹配,或者,它会找到你的
特殊代码寻找,然后你可以选择突破。
不确定 JS,但如果你不能坐在循环中,就一口气
找到所有,然后检查捕获缓冲区 3 数组(或者,如果它很大
,则每三个数组检查一次数组)。
在此正则表达式中,特殊代码(如果找到)将始终位于第 3 组中。
因此,您只需要检查组 3 是否为 NULL,设置一个标志,然后脱离循环。
完成后,根据是否设置了标志返回适当的响应。
这是压缩和分隔/../
正则表达式:
/('/'*[^*]*'*+(?:[^'/*][^*]*'*+)*'/|'/'/[^'n]*(?:'n|$))|("[^"'']*(?:''['S's][^"'']*)*"|'[^''']*(?:''['S's][^''']*)*'|(?!special'[i']'.code)['S's](?:(?!special'[i']'.code)[^'/"'])*)|(special'[i']'.code)/
这是可读格式的原始正则表达式(带有注释):
( # (1 start), Comments
/'* # Start /* .. */ comment
[^*]* '*+
(?: [^/*] [^*]* '*+ )*
/ # End /* .. */ comment
|
// [^'n]* # Start // comment
(?: 'n | $ ) # End // comment
) # (1 end)
| # OR,
( # (2 start), Non - comments
"
[^"'']* # Double quoted text
(?: '' ['S's] [^"'']* )*
"
|
'
[^''']* # Single quoted text
(?: '' ['S's] [^''']* )*
'
|
(?! special'[i']'.code ) # This is to blow by any non-comment '/' char or any unbalanced quotes (technically a code error)
['S's]
# Any other char, but not these special tokens.
# Chars which doesn't start a comment or string
(?: # But not special tokens
(?! special'[i']'.code )
[^/"']
)*
) # (2 end)
| # OR,
( # (3 start), Special Tokens
special'[i']'.code
) # (3 end)
以下是一些具有相应匹配项的示例:
正则表达式返回:真(包含未提交的实例)
function someFunction() {
special[i].code
}
** Grp 0 - ( pos 0 , len 31 )
function someFunction() {
** Grp 1 - NULL
** Grp 2 - ( pos 0 , len 31 )
function someFunction() {
** Grp 3 - NULL
-------------------
** Grp 0 - ( pos 31 , len 15 )
special[i].code
** Grp 1 - NULL
** Grp 2 - NULL
** Grp 3 - ( pos 31 , len 15 )
special[i].code
可以在这里中断,因为组 3 不是 NULL
正则表达式返回:真(包含未提交的实例)
function someFunction() {
/* special[i].code */
special[i].code
}
** Grp 0 - ( pos 0 , len 31 )
function someFunction() {
** Grp 1 - NULL
** Grp 2 - ( pos 0 , len 31 )
function someFunction() {
** Grp 3 - NULL
-------------------
** Grp 0 - ( pos 31 , len 21 )
/* special[i].code */
** Grp 1 - ( pos 31 , len 21 )
/* special[i].code */
** Grp 2 - NULL
** Grp 3 - NULL
-------------------
** Grp 0 - ( pos 52 , len 6 )
** Grp 1 - NULL
** Grp 2 - ( pos 52 , len 6 )
** Grp 3 - NULL
-------------------
** Grp 0 - ( pos 58 , len 15 )
special[i].code
** Grp 1 - NULL
** Grp 2 - NULL
** Grp 3 - ( pos 58 , len 15 )
special[i].code
可以在这里中断,因为组 3 不是 NULL
- 查找将 onclick 事件分配给节点的代码
- javascript代码查找最接近零的tescase
- 正在查找这些JQuery代码行的Javascript
- 用于查找JS代码中引用的DOM元素的工具
- ace编辑器查找代码片段
- 使用javascript查找并删除所有出现的短代码
- 代码在shell中运行,但提供'可以't查找变量'从文件运行时出错
- 什么'用这个代码查找高度英寸是错误的
- 在代码块中查找并替换为jQuery
- 在IE8中查找复选框时,我的代码有什么区别
- 用于查找在 jQuery 元素集中具有特定类的元素的索引的单行代码
- 为什么我的代码不能用于查找 JavaScript 中的数组中是否存在值
- 如何在整个文件夹中查找一行代码
- 如何查找 Angular.js 中已经在进行中的哪一行代码触发器$digest
- [代码播放器]当 iframe 内容从文本区域使用 JavaScript 动态加载时,如何在 iframe 内查找元素
- 如何获取解析云代码查找结果
- 通过PHP代码查找扫描程序的状态
- 按特定代码查找结果为null
- 使用Javascript代码查找当前SharePoint用户
- 如何使用Javascript代码查找客户端的IP地址