javascript - 正则表达式避免特定内容
问题描述
我有一个像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('+')
。
任何帮助将不胜感激。
解决方案
您可以使用匹配的正则表达式解决方案:
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))/));
请参阅正则表达式演示。
推荐阅读
- java - 没有类 weka.filters.unsupervised.instance.imagefilter.BinaryPatternsPyramidFilter 可以位于 Java 类路径上
- r - 当数据不包含负值时,如何以负 x 轴值开始 ggplot?
- c++ - 通过 QLineEdit 过滤查询并更新 QSqlQueryModel
- angular - 为 rxjs 重构 combinelatest
- spring - 在springdata-cassandra中将null读取为空集
- java - UTF-8 编码 CSV 文件
- android - REACT NATIVE 无法在额外的属性扩展上获取属性“compileSdkVersion”,因为它不存在
- .net - 使用 .net 方法但不使用 powershell cmdlet 的文件
- mysql - 数据库设计帐户与客户帐户
- bash - Bash字符串文字比较变量失败