我有一个字符串值,其示例如下所示
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
Run Code Online (Sandbox Code Playgroud)
我的最终字符串基本上应该删除连接字符串中每个部分的 ID,因此通过查看上面的示例数据,所需的输出应如下所示:
Optics-Bottle Detect failure ~ L 0 ~ P 0 | Optics-Bubble Detect failure ~ L 0 ~ P 0
Run Code Online (Sandbox Code Playgroud)
一根弦中可能有N个部分。为了举例,我只包含一个示例字符串,其中有两个部分。
**我的正则表达式
我使用以下正则表达式,但它只删除了字符串第一部分中的 ID
var y = x.replace(/\d{6}\s~\s/g, "");
Run Code Online (Sandbox Code Playgroud)
" | "使用分隔符和将字符串拆分为多维数组" ~ "。然后你可以.shift()关闭 id,因为它是数组中的第一个条目,并将其全部重新连接在一起:
var y = x.split(" | ").map(function(s) {
s = s.split(" ~ ");
s.shift();
return s.join(" ~ ");
}).join(" | ");
Run Code Online (Sandbox Code Playgroud)
或者,获取 后面的子字符串" ~ ":
var y = x.split(" | ").map(function(s) {
return s.substr(s.indexOf(" ~ ") + 3);
}).join(" | ");
Run Code Online (Sandbox Code Playgroud)
或者,更正您的正则表达式以考虑空格长度变化:
var y = x.replace(/\d{6}\s+~\s/g, "");
Run Code Online (Sandbox Code Playgroud)
但是,只有当 id 中始终恰好有 6 位数字且在其他地方的 a 之前没有 6 位数字时,此正则表达式才会起作用~。例如,如果存在Reps100000 或更大的值,您的 RegExp 也会将其删除。
更好的正则表达式可以采用任意数量的数字(多于或少于 6 位),并且仅在它是第一项或后面的情况下才匹配它|:
var y = x.replace(/(^|\|\s+)\d+\s+~\s+/g, "$1");
Run Code Online (Sandbox Code Playgroud)