javascript - 排除 if between,但更复杂
问题描述
所以,我正在尝试制作正则表达式,它将解析所有全局函数声明,存储在对象中,例如,像这样const a = () => {}
我做了这样的事情:
/(?:const|let|var)\s*([A-z0-9]+)?\s*=\s(function\s*\(([^)(]+|\((?:[^)(]+|\([^)(]*\))*\))*\)|\(([^)(]+|\((?:[^)(]+|\([^)(]*\))*\))*\)\s*\=\>)\s*\{((?:[^}{]+|\{[^}{]*\}|[^}]|\}(\"|\'|\
))*)*\}/g
它工作正常,但我遇到了内部声明(链接) 的问题
如果链接不起作用:
const definedJsFunctionsAsObjectRegex = /(?:const|let|var)\s*([A-z0-9]+)?\s*=\s(function\s*\(([^)(]+|\((?:[^)(]+|\([^)(]*\))*\))*\)|\(([^)(]+|\((?:[^)(]+|\([^)(]*\))*\))*\)\s*\=\>)\s*\{((?:[^}{]+|\{[^}{]*\}|[^}]|\}(\"|\'|\`))*)*\}/g;
const str = `
let f = function(a,b) {
console.log(gdhfsgdfg);
}
const f2 = (a,b, d) => { blabla }
let f3 = function(){
fdgdhgf
}
function test() {
const inner = (t, b) => { im must be undetected}
const inner2 = function (a,b) {
im must be undetected too
}
}
// here checking for }"
function(fds) { obj = {} return "}" }
function r () { obj = {}; a = []; }
function a(){console.log('a')} function b(){console.log('b')}
`;
let matches = [...str.matchAll(definedJsFunctionsAsObjectRegex)];
console.log(matches)
那么,有什么想法,如何排除内部函数声明?
我尝试过负前瞻(?!),但我的实验没有给出预期的结果。
解决方案
使用多线运算符并将您的后视更改为像这样的锚
/^(const|let|var)\s*([A-z0-9]+)?\s*=\s(function\s*\(([^)(]+|\((?:[^)(]+|\([^)(]*\))*\))*\)|\(([^)(]+|\((?:[^)(]+|\([^)(]*\))*\))*\)\s*\=\>)\s*\{((?:[^}{]+|\{[^}{]*\}|[^}]|\}(\"|\'|\`))*)*\}/gm
在此处查看输出
推荐阅读
- android - 区分 OnTouchListener 中的短按(单击)和长按
- python - 我们可以使用 eval 函数来获取用户创建的列表吗?
- python - 为什么在 TF 2.0 和 1.15 上训练 DCGAN 时结果会不同?
- javascript - 如何使用酶作为实例()测试功能组件内部的方法,为浅包装器返回 null?
- php - 从 php 返回的 Android 读取数组
- typescript - 无法使用 `ts-node` 在 expo 上运行脚本(react-native)
- java - 在不同的计算机上出现此错误:源服务器没有找到当前的表示
- swift - WebView完整问题显示加载html - swift
- php - 即使页面存在,PHP Page Not Found 错误
- node.js - UnhandledPromiseRejectionWarning: FetchError: request to http://localhost:3000/all/search_tracks failed, reason: socket hang up