【问题标题】:Split string and keep new lines拆分字符串并保留新行
【发布时间】:2022-11-26 04:34:10
【问题描述】:

我正在尝试将一个字符串最终拆分为一个以分号作为分隔符的二维数组。

var str = "2;poisson
            poisson
           3; Fromage
           6;Monique"

var arr = [2, "poisson
               poisson"],
          [3," Fromage"],
          [6,"Monique"]

数组的格式是

[int, string that may start with white space and may end with possible new lines]

第一步是通过正则表达式。但是,使用 (\d+\;\s?)(.)+ 不会换行。 Regex101

我对如何进行感到有点困惑,因为换行符/回车符很重要,我不想丢失它们。我的 RegEx Fu 今天很弱。

【问题讨论】:

  • 在这里使用正则表达式有什么具体原因吗? (例如,为什么不直接使用 str.split(';') 给出 ['2', 'poisson\n poisson\n 3', ' Fromage\n 6', 'Monique']
  • 啊没关系只是注意到输入/输出中\n的细微差别
  • @akash 线索在标题中:)
  • split 确实保留新行:)

标签: javascript regex photoshop-script


【解决方案1】:

使用 Javascript,您可以使用 2 个捕获组:

(d+);([^]+?)(?=
s*d+;|$)

模式匹配:

  • 一个字界
  • (d+);捕获第 1 组,捕获 1+ 位数字,然后匹配 ;
  • (捕捉第 2 组
    • [^]+? 匹配任意字符 1 次以上,包括换行符
  • )关闭群
  • (?=积极前瞻,断言右边是什么
    • s*d+;|$ 匹配后跟可选空白字符和第一个模式的新行,或者字符串的结尾
  • )关闭前瞻

Regex demo

const str = `2;poisson
            poisson
           3; Fromage
           6;Monique`;


const regex = /(d+);([^]+?)(?=
s*d+;|$)/g;
console.log(Array.from(str.matchAll(regex), m => [m[1], m[2]]))

【讨论】:

    【解决方案2】:

    这是一个简短而甜蜜的解决方案,可以通过两个嵌套的.split()获得结果:

    const str = `2;poisson
        poisson
    3; Fromage
    6;Monique`;
    let result = str.split(/
    (?! )/).map(line => line.split(/;/));
    console.log(JSON.stringify(result));

    输出:

    [["2","poisson
        poisson"],["3"," Fromage"],["6","Monique"]]
    

    第一个拆分正则表达式的说明:

    • -- 换行符(可能更改为 [ ]+ 以支持 Windows 换行符
    • (?! ) -- 空间的负前瞻

    【讨论】:

      猜你喜欢
      • 2020-09-13
      • 1970-01-01
      • 2016-11-26
      • 2022-11-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多