【问题标题】:find first matches character in regular expression在正则表达式中查找第一个匹配字符
【发布时间】:2020-03-06 00:19:24
【问题描述】:

我有一个字符串,我想查找“a”字符和第一个“c”字符并用“*”字符替换,但正则表达式查找所有“a”和“c”字符我不知道该怎么做它。

这是我的代码:

var pattern=/[a][c]/g; //here my pattern
var str1="aaaaaaaaaabbbbbbaaaaaaaaaabbbccccccccccbbbbbbbbccc";
var rep=str1.replace(pattern,"*");
$("p").html(rep);

【问题讨论】:

  • 请添加想要的结果。
  • 最后去掉“g”即可。 “g”表示“全局搜索”
  • 从正则表达式中删除全局/g标志,使用str1.replace('a', '*').replace('c', '*')
  • @AZ_ 当我删除全局时,我想同时替换字符“c”和“a”,只需替换“a”字符
  • 您必须使用.replace 两次。

标签: javascript regex regex-greedy regular-language


【解决方案1】:

您需要两个替换,因为一个替换 ac,具体取决于字符串中的第一次出现。

var string = "aaaaaaaaaabbbbbbaaaaaaaaaabbbccccccccccbbbbbbbbccc",
    result = string
        .replace(/a/, '*')
        .replace(/c/, '*');

console.log(result);

一种在哈希表上使用单个替换和闭包的方法。

var string = "aaaaaaaaaabbbbbbaaaaaaaaaabbbccccccccccbbbbbbbbccc",
    result = string.replace(/[ac]/g, (h => c => h[c] ? c : (h[c] = '*'))({}));

console.log(result);

【讨论】:

    【解决方案2】:

    您可以对除第一个以外的所有 a 或 c 序列使用捕获组,并将它们替换为 '*$1'($1 是捕获组的 replacement pattern):

    const str = `aaaaaaaaaabbbbbbaaaaaaaaaabbbccccccccccbbbbbbbbccc`;
    
    const result = str.replace(/[ac]([ac]+)/g, '*$1');
    
    console.log(result);

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-12-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-13
      • 2017-02-09
      • 2012-09-17
      相关资源
      最近更新 更多