需要从 javascript 中的一个长字符串中替换一个字符串

Need to replace a string from a long string in javascript

我有一个长字符串

Full_str1 = 'ab@xyz.com;cab@xyz.com;c-ab@xyz.com;c.ab@xyz.com;c_ab@xyz.com;';
removable_str2 = 'ab@xyz.com;';

我需要一个替换字符串 结果最终字符串应该是这样的,

cab@xyz.com;c-ab@xyz.com;c.ab@xyz.com;c_ab@xyz.com;

我试过

str3 = Full_str1.replace(new RegExp('(^|\b)' +removable_str2, 'g'),"");

但结果是

cab@xyz.com;c-c.c_ab@xyz.com;

这里是每个案例使用两个独立的正则表达式的解决方案:

  • 要删除的字符串位于字符串的开头
  • 要删除的字符串在字符串内部或末尾

PS : 我无法在一个正则表达式中执行它,因为它会删除一个额外的 ; 以防匹配要删除的字符串内部的全局字符串。

const originalStr = 'ab@xyz.com;cab@xyz.com;c-ab@xyz.com;c.ab@xyz.com;ab@xyz.com;c_ab@xyz.com;';
const toRemove = 'ab@xyz.com;';

const epuredStr = originalStr
                      .replace(new RegExp(`^${toRemove}`, 'g'), '')
                      .replace(new RegExp(`;${toRemove}`, 'g'), ';');

console.log(epuredStr);

我没有找到任何具体说明为什么你没有像这样尝试它会给你想要的结果 cab@xyz.com;c-ab@xyz.com;c.ab@xyz.com;c_ab@xyz.com;

const full_str1 = 'ab@xyz.com;cab@xyz.com;c-ab@xyz.com;c.ab@xyz.com;c_ab@xyz.com;';
const removable_str2 = 'ab@xyz.com;';

const result= full_str1.replace(removable_str2 , "");

console.log(result);

首先,动态部分必须是 escaped,否则,. 将匹配除换行符之外的任何字符,并且也将匹配 ab@xyz§com;

接下来,你只需要在字符串的开头或;之后匹配这个。所以,你可以使用

var Full_str1 = 'ab@xyz.com;cab@xyz.com;c-ab@xyz.com;c.ab@xyz.com;c_ab@xyz.com;';
var removable_str2 = 'ab@xyz.com;';
var rx = new RegExp("(^|;)" + removable_str2.replace(/[-\/\^$*+?.()|[\]{}]/g, '\$&'), "g");
console.log(Full_str1.replace(rx, ""));
// => cab@xyz.com;c-ab@xyz.com;c.ab@xyz.com;c_ab@xyz.com;

"g" 替换为 "gi" 以进行不区分大小写的匹配。

regex demo。请注意 (^|;) 匹配并 捕获到第 1 组 字符串位置的开始(空字符串)或替换模式中的 ;</code> 恢复此字符在结果中。</p> <p><strong>注意</strong>:如果事先知道模式并且您只想处理 <code>ab@xyz.com; 模式,请使用不转义的正则表达式文字,Full_str1.replace(/(^|;)ab@xyz\.com;/g, "").