regex js解析函数串

时间:2016-11-06 02:46:40

标签: javascript regex parsing

我正在寻找创建一个解析一系列函数的正则表达式,通常看起来像这样:

"  a   b ( )     c  d ( 1, 2 )  text(' asdf  sg sf  sd sdf ')  "

进入一个数组,删除所有空格,但单引号或双引号内的空格除外。 IE,像这样:

['a','b()','c','d(1,2)',"text(' asdf sg sf sd sdf ')"]

我确信自计算机诞生以来这种类型的问题一直存在,所以我很惊讶我无法在网络上找到这个问题的整齐的正则表达式解决方案!

任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:0)

说出你的意思 - 一系列字母(\w+),可能(?)后跟一些空格(\s*)和括号内容(\(.*?\) }:

var str = "  a   b ( )     c  d ( 1, 2 )  text(' asdf  sg sf  sd sdf ')  ";

var re = /\w+(\s*\(.*?\))?/g;
//        ^^^                     IDENTIFIER
//               ^^^^^^^          ARGLIST

// Remove spaces in each result, except for spaces in "string literals" like 'a b'.
function squeeze(str) {
  return str.replace(/'.*?'| /g, match => match === ' ' ? '' : match);
}

console.log(str.match(re).map(squeeze));

这无法处理嵌套函数调用。使用正则表达式可能几乎不可能。