通过正则表达式

时间:2018-12-13 14:01:04

标签: regex xpages-ssjs

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

值可以如下:

2018-12-12 09:36 Jane Doe 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文件的引用,其中所有键-值对转换都位于其中。

该代码对于前两个值正常工作。所有其他值均保持原始值,例如¤target_custDB¤

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

1 个答案:

答案 0 :(得分:2)

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

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正则表达式将匹配多次出现的

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

替换逻辑是:如果有一个带有组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);