4

我有一个字符串值,示例如下

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, "");
4

2 回答 2

2

" | "使用分隔符和将字符串拆分为多维数组" ~ "。然后你可以.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, "");

但是,这个正则表达式只有在 id 中总是正好有 6 位数字并且永远不会在~其他地方之前有 6 位数字时才有效。例如,如果应该有Reps100000 或更大的值,您的 RegExp 也会将其删除。

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

var y = x.replace(/(^|\|\s+)\d+\s+~\s+/g, "$1");
于 2013-07-02T21:40:20.580 回答
2

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

var str = "144515 ~ Commodities-Damaged Reagent Cartridge ~ L 0 ~ P 0 | 144516 ~ Commodities";
var n=/\d{6}\s+~/g;
str = str.replace(n, "");
于 2013-07-02T21:48:40.440 回答