[英]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.