在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¤
我猜检测字符串有问题,所以我想知道我的正则表达式是否正确吗?
答案 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);