通过正则表达式替换字符串中的多个字符串

Replace multiple strings in a string via regexp

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

取值可以如下:

2018-12-12 09:36 李四 SysTest/Web/ACME ¤verb_created¤ ¤subj_document¤ 申请中 ¤target_custDB¤

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

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 个值工作正常。所有附加值均保持原始值,例如¤target_custDB¤

我想检测字符串出了点问题,所以我想知道我的正则表达式是否正确?

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

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([=10=],) { return history1[] ? history1[] : [=10=];});
console.log(str);

/¤(\w+)¤/g 正则表达式将匹配多次出现的

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

替换逻辑是:如果有一个key-value对有Group 1 key,则返回这个值进行替换,否则,将匹配粘贴回结果。

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

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);