首页 > 解决方案 > 正则表达式避免特定内容

问题描述

我有一个像23DGERA@SPK_20W L+R FA-2@1+342HSHC@CPU_8PIN INTEL_TEST!@1+2356GHMX@SSD_256G MICRON_CONTENT@2 + blablabla.

我想做的是将字符串拆分+,但在 SPK 部分有一个 L+R 会中断该过程。有没有可以实现我想要的正则表达式?

结果应该是:

23DGERA@SPK_20W L+R FA-2@1
342HSHC@CPU_8PIN INTEL_TEST!@2
2356GHMX@SSD_256G MICRON_CONTENT@2

现在我总是得到:

23DGERA@SPK_20W L
R FA-2@1
342HSHC@CPU_8PIN INTEL_TEST!@2
2356GHMX@SSD_256G MICRON_CONTENT@2

我现在正在使用Javascript .split('+')

任何帮助将不胜感激。

标签: javascriptregexecmascript-6

解决方案


您可以使用匹配的正则表达式解决方案:

text.match(/(?:L\+R|[^+])+/g)

请参阅正则表达式演示详情

  • (?:- 非捕获组的开始:
    • L\+R-L+R字符串
    • |- 或者
    • [^+]- 任何字符以外的任何字符+
  • )+- 组结束,出现一次或多次。

请参阅 JavaScript 演示:

var text = '23DGERA@SPK_20W L+R FA-2@1+342HSHC@CPU_8PIN INTEL_TEST!@1+2356GHMX@SSD_256G MICRON_CONTENT@2';
console.log(text.match(/(?:L\+R|[^+])+/g));

符合 ECMAScript 2018+ 的解决方案

如果您想迁移到更现代的 ECMAScript 风格,您可以使用

text.split(/\+(?<!L\+(?=R))/)

这将匹配+不属于L+R字符串的 a。

const text = '23DGERA@SPK_20W L+R FA-2@1+342HSHC@CPU_8PIN INTEL_TEST!@1+2356GHMX@SSD_256G MICRON_CONTENT@2';
console.log(text.split(/\+(?<!L\+(?=R))/));

请参阅正则表达式演示


推荐阅读