代码之家  ›  专栏  ›  技术社区  ›  Patrick Kwinten

通过regexp替换字符串中的多个字符串

  •  2
  • Patrick Kwinten  · 技术社区  · 7 年前

    在Xpage上,我们显示对象上注册的活动。活动存储在多值注释字段中。

    值可以如下所示:

    2018-12-12 09:36 Jane Doe系统测试/网络/Acme_动词_创建_ Subj_文档_应用中_目标_客户数据库_

    我通过重复控件显示字段。在repeat中,我有一个值为的计算文本控件:

    var str = obj;
    var regexp = /\¤(.*?)\¤/;
    var translations = regexp.exec(str);
    if (null != translations){
        for (i = 0; i < translations.length; i++) { 
            if(null != regexp.exec(str)){
                trans = regexp.exec(str)[0];
                //verb first
                if (null != trans){
                    str = regexp.replace(str, history[trans]);
                }
            }
        }
    }
    return str;
    

    这里的history是对history.properties文件的引用,其中包含所有键值对转换。

    对于前2个值,代码工作正常。所有附加值均保持原始值,例如“目标值”和“客户值”。

    我想检测字符串有问题,所以我想知道我的regexp是否正确?

    1 回复  |  直到 7 年前
        1
  •  2
  •   Wiktor Stribiżew    7 年前

    可以使用带有全局修饰符的regex,并将回调方法作为替换参数传递,以获取适当的值:

    var history1 = {'verb_created': '2018', 'subj_document': 'DOCUMENT', 'target_custDB': 'TARGET'};
    var str = "2018-12-12 09:36 Jane Doe SysTest/Web/ACME ¤verb_created¤ ¤subj_document¤ in application ¤target_custDB¤";
    var regex = /¤(\w+)¤/g;
    str = str.replace(regex, function($0,$1) { return history1[$1] ? history1[$1] : $0;});
    console.log(str);

    这个 /¤(\w+)¤/g regex将匹配

    • ¤ -A γ 烧焦
    • (\w+) -第1组:一个或多个ASCII字母、数字或 _
    • γ -A γ 烧焦。

    替换逻辑为:如果有一个带有组1键的键值对,则返回该值进行替换,否则,匹配项将粘贴回结果中。

    要简单地提取这些子字符串,请使用

    var str = "2018-12-13 16:50 Anna User SysTest/Web/ACME ¤verb_created¤ ¤subj_document¤";
    var regex = /¤(\w+)¤/g;
    var translations = [], m;
    while (m = regex.exec(str)) {
      translations.push(m[1]);
    }
    console.log(translations);