【问题标题】:regex js parse string of functions正则表达式 js 解析函数字符串
【发布时间】:2016-11-06 02:46:40
【问题描述】:

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

"  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 ')"]

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

任何帮助将不胜感激!

【问题讨论】:

  • 请发布您到目前为止所尝试的内容。
  • 对不起,我遗漏了数组中的引号。我的意思是:['a','b()','c','d(1,2)',"text(' asdf sg sf sd sdf ')"]
  • 所以编辑答案并更正它
  • 究竟是什么让ac 发挥作用?
  • 拜托,为了人类,告诉我你不会eval()'ing这些功能......

标签: javascript regex parsing


【解决方案1】:

只要说出你的意思——一系列字母 (\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));

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-04-29
    • 2012-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多