C# .NET正则需求:提取feedbackResultToast函数的引号内文本
修正C# .NET正则表达式匹配JS中
feedbackResultToast函数调用并提取包裹文本 需求概述
JS文件中存在feedbackResultToast函数,需用C# .NET正则表达式匹配该函数的调用语句,提取其中被双引号(")、单引号(')或反引号(`)包裹的文本内容。原正则表达式存在误匹配无关代码的问题,需修正。
原正则问题
原正则:
^\s*feedbackResultToast\([^,]*, (?:result\.error \|\| )?([""'`].*[""'`])?,?[^,]*\);
会误匹配无feedbackResultToast的代码,例如:
if (data.action== "edit") {
或
textBtnModal: "Add",
问题根源:
.*为贪婪匹配,易跨行或过度匹配,甚至在错误模式下破坏前置匹配逻辑- 未处理引号内的转义字符(如
\"、\'),导致匹配边界混乱 - 参数部分的
[^,]*写法过于宽泛,可能脱离函数调用的上下文匹配
修正后的正则表达式
针对提取第二个参数中引号包裹内容的场景
如果你的需求是提取类似feedbackResultToast(arg1, result.error || "操作成功", arg3);中引号内的文本,可使用以下正则:
^\s*feedbackResultToast\([^,]+,\s*(?:result\.error\s*\|\|\s*)?(?<q>["'`])(?<content>(?:\\.|(?!\k<q>).)*)\k<q>\s*(?:,[^)]*)?\);
通用匹配函数调用并提取所有引号内容的场景
如果需要匹配任意feedbackResultToast调用,并提取所有被引号包裹的内容,可使用:
^\s*feedbackResultToast\((?:[^"'`()]+|(?<q>["'`])(?<content>(?:\\.|(?!\k<q>).)*)\k<q>|\([^()]*\))*\);
使用说明
- 在C#中使用时,需启用
RegexOptions.Multiline模式,确保^匹配每一行的开头,避免跨行误匹配 - 针对第一个场景,可通过捕获组
content直接获取引号内的文本(不含引号) - 正则支持引号内的转义字符,例如
"it\'s a test"或`he said \"hello\"`这类内容都能正确匹配
内容的提问来源于stack exchange,提问作者Bohdan Voznyi
相关产品推荐
相关产品推荐

