首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于将Bioware .2da表行转换为数组的.2da正则函数

用于将Bioware .2da表行转换为数组的.2da正则函数
EN

Stack Overflow用户
提问于 2016-06-13 21:02:02
回答 3查看 47关注 0票数 0

我想为表行字符串返回一个数组,如下所示:

代码语言:javascript
复制
'31 Chicken   2013  "Chi cken"    12.345   ****'

到数组:["Chicken", 2013, "Chi cken", 12.345, null]

  • 表中的列由条目之间的任意数量的一个或多个空格(非制表符)定义。(包含空格的条目以双引号括起来,不能包含引号本身。)
  • 第一列总是整数,可以丢弃,因此数组以第二列开头。
  • 条目可以是整数、浮点数或字符串。
  • 4个连续星号*表示空值。

有什么帮助吗?

(链接到更完整的格式信息:Format.pdf)

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-06-14 00:52:54

我采纳了克隆哈姆的一些建议和这个答案的一个准则。无法理解如何从添加到匹配字符串中获取引号。

代码语言:javascript
复制
var str = '31 Chicken    2013 "Chi cken" 12.345 ****';
console.log(str);
var tmp = str.match(/[^\s"']+|"([^"]*)"|'([^']*)'/g);
console.log(tmp);
var n;
tmp.shift();
for (i = 0; i < tmp.length; i++) {
  str = tmp[i];
  if (str === "****") {
    tmp[i] = null;
  }
  else if (str.startsWith('"')) {
    n = str.lastIndexOf('"');
    tmp[i] = str.slice(1,n); 
    }
  else {
    n = Number(str);
    if(isNaN(n)){
      //console.log(str + " NaN")
    }
    else tmp[i] = n;
  }

}
console.log(tmp);
票数 0
EN

Stack Overflow用户

发布于 2016-06-13 21:25:59

我会编写一个解析器,它涵盖了您的示例。

工作示例:JSFiddle

代码语言:javascript
复制
for (i = 0; i < tmp.length; i++) {
  if (i == 0) continue;
  else if (tmp[i] === "****") {
    output.push("null");
    continue;
  }
  else if (tmp[i].startsWith('"')) {
    output.push(tmp[i] + ' ' + tmp[i + 1]);
    i++;
    continue;
    }
  else {
    output.push(tmp[i]);
  }
}
票数 0
EN

Stack Overflow用户

发布于 2016-06-13 21:38:04

下面是六个匹配项的正则表达式,然后您可以忘记项[0]并将最后一个项转换为null (时*)

代码语言:javascript
复制
[0-9\.0-9]+|[a-zA-Z0-9]+|\"[a-zA-Z0-9 ]+\"|\*\*\*\*
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37799049

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档