【问题标题】:Search in string and quote around occurrence在字符串中搜索并在出现周围引用
【发布时间】:2020-03-19 06:04:45
【问题描述】:

使用 Javascript 我需要能够搜索用户输入的字符串并将出现的分号替换为逗号。我遇到的问题是我需要能够在字符串中搜索任何已经存在的逗号,并引用分号的最后一个和下一个出现。

示例: 用户输入为12345;Joran,Michael;02;17;63 应转换为12345,"Joran,Michael",02,17,63

我的包含能够在原始字符串var srch = source.includes(","); 中找到逗号的出现,而我的替换是var converted = source.replace(/;/g, ",");,它工作正常,只需要弄清楚如何到达最后一个/下一个分号来放置引号.

根据 srch 的计算结果是否为 True 使用 if/else -- 如果为 true,则添加引号,然后转换字符串的其余部分并返回给用户;如果为假,则转换并返回。

我确信有一种方法可以使用我还没有想到的正则表达式来做到这一点,所以任何关于看什么的建议都会很棒。

【问题讨论】:

  • 您的输出格式是 CSV 吗?您的输入格式是否同样定义明确? (例如,数据是否可以包含转义的分号、引号或换行符?)

标签: javascript string


【解决方案1】:

我会分两步完成。首先匹配至少有一个, 的非; 字符,并用引号将它们括起来。然后将结果中的所有;s替换为,

console.log(
  '12345;Joran,Michael;02;17;63'
    .replace(/[^;,]*,[^;]*/g, '"$&"')
    .replace(/;/g, ',')
);

【讨论】:

  • $& 是我忘记找到匹配的东西!谢谢!自从我不得不使用正则表达式以来已经太久了。
【解决方案2】:

;分割字符串

.split(';')

它给你一个数组。

将包含',' 的元素转换为"${element}"

.map(s => s.includes(',') ? `"${s}"` : s )

将数组转换回字符串

.join(',')

【讨论】:

    【解决方案3】:
        var str = '12345;Joran,Michael;02;17;63';
        var arr = str.split(";");
        var letters = /^[A-Za-z]/;
        var final_str = "";
        for (var i = 0; i < arr.length; i++) {
            final_str = arr[i].match(letters)?final_str +'"'+ arr[i]+'"'+",":final_str + arr[i]+",";
        }
        console.log(final_str.substring(0,final_str.length -1));
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多