繁体   English   中英

如何使用javascript正则表达式从字符串中删除字符

[英]how to use javascript regex to remove characters from string

我有一个字符串值,看起来像下面的样本

data:


130823  ~ Optics-Bottle Detect failure ~ L 0 ~ P 0 | 130824 ~ Optics-Bubble Detect failure ~ L 0 ~ P 0

Format:

ID:          130823
Description: Optics-Bottle Detect failure 
Reps:        L O
Pending:     P 0

我的最后一个字符串应该基本上从连接字符串中的每个部分删除ID,因此通过查看上面的示例数据,所需的输出应如下所示:

 Optics-Bottle Detect failure ~ L 0 ~ P 0 | Optics-Bubble Detect failure ~ L 0 ~ P 0 

一个字符串中可能有N个部分。 为了举例,我只包括一个样本字符串,其中包含两个部分。

**我的正则表达式

我使用以下正则表达式但它只删除了字符串中第一部分的ID

var y = x.replace(/\d{6}\s~\s/g, "");

使用分隔符" | "" ~ "将字符串拆分为多维数组。 然后你可以.shift()关闭id,因为它是数组中的第一个条目,并将它们全部重新加入:

var y = x.split(" | ").map(function(s) {
    s = s.split(" ~ ");
    s.shift();
    return s.join(" ~ ");
}).join(" | ");

或者,获取" ~ "后面的子字符串:

var y = x.split(" | ").map(function(s) {
    return s.substr(s.indexOf(" ~ ") + 3);
}).join(" | ");

或者,更正您的RegExp以考虑空白长度变化:

var y = x.replace(/\d{6}\s+~\s/g, "");

但是,这个正则表达式只会只要有总是精确6位数字的ID,从来没有6位数前面的工作~别处。 例如,如果Reps值为100000或更高,则RegExp也将删除它。

一个更好的正则表达式将采用任意数量的数字(多于少于6)并且只有在它是第一个项目时才匹配,或者在|

var y = x.replace(/(^|\|\s+)\d+\s+~\s+/g, "$1");

例如,这是一个可能的答案

var str = "144515 ~ Commodities-Damaged Reagent Cartridge ~ L 0 ~ P 0 | 144516 ~ Commodities";
var n=/\d{6}\s+~/g;
str = str.replace(n, "");

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM