Javascript 如何使用正则表达式拆分这两个字符串?

Javascript 如何使用正则表达式拆分这两个字符串?,javascript,regex,Javascript,Regex,以下是两个字符串: " at callback (/Users/lem/Projects/RingAPI/packages/server/node_modules/loopback-connector-rest/lib/rest-builder.js:541:21)" " at /Users/lem/Projects/RingAPI/packages/server/node_modules/@loopback/repository/node_modules/loopback-dat

以下是两个字符串:

"    at callback (/Users/lem/Projects/RingAPI/packages/server/node_modules/loopback-connector-rest/lib/rest-builder.js:541:21)"

"    at /Users/lem/Projects/RingAPI/packages/server/node_modules/@loopback/repository/node_modules/loopback-datasource-juggler/lib/observer.js:269:22"
如何使用JS和Regex将它们拆分成这些

['callback', '/Users/lem/Projects/RingAPI/packages/server/node_modules/loopback-connector-rest/lib/rest-builder.js', '541', '21']

['', '/Users/lem/Projects/RingAPI/packages/server/node_modules/@loopback/repository/node_modules/loopback-datasource-juggler/lib/observer.js', '269', '22']

我已经为您编写了简单的解析函数:

函数解析(字符串){
const functionName=string.match(/at.*/);
返回[
…(functionName&[functionName[0].slice(2).trim()]| |[''),
…字符串。匹配(/\/.*/)[0]。拆分(“:”)
];
}
首先,我尝试提取函数名。如果存在,我删除“at”字,并使用修剪功能删除不必要的空格。然后我查找以斜杠“/”开头的子字符串,并匹配其后的每个字符。最后一步是拆分返回的字符串

我相信它符合你的要求。 我还在stackblitz中准备了演示:

尝试regexp命名组

它增加了这种奇怪正则表达式的结果可读性;)

const字符串=[
“在回调时(/Users/lem/Projects/RingAPI/packages/server/node_modules/loopback connector rest/lib/rest builder.js:541:21)”,
“在/Users/lem/Projects/RingAPI/packages/server/node_modules/@loopback/repository/node_modules/loopback datasource juggler/lib/observer.js:269:22”
];
常量正则表达式=/^\s*?at\s.(?*?)\s\(?(?*):(?\d*)/;
forEach(string=>{
const result=string.match(regex);
resultElement.innerHTML+=
'\n'+JSON.stringify({string,“result.groups”:result.groups},null,4)
})

您可以将regex用于此目的,即:

    const regex = /at( (?:[a-z]+)?)\(?(.+)\:(\d+)\:(\d+)\)?/;
    //const str = "    at callback (/Users/lem/Projects/RingAPI/packages/server/node_modules/loopback-connector-rest/lib/rest-builder.js:541:21)";
    const str = "    at /Users/lem/Projects/RingAPI/packages/server/node_modules/@loopback/repository/node_modules/loopback-datasource-juggler/lib/observer.js:269:22";
    const found = str.match(regex);
    found.splice(0, 1)
    console.log(found)

它适用于两个字符串。

首先在
处拆分字符串:
。然后在第一部分中匹配
/\/.*/
。然后只需检查第一部分中是否有
回调
。“回调”只是一个示例,它可能是“MyClassName.myMethod”。我已经编辑了我的答案,stackblitz演示。如果没有f,您可以返回空字符串吗函数或方法名称?您可以检查第一个元素,然后执行所需操作:
if(找到[0]==“”){console.log('Function或method name not found!')}