用户可自定义的字符串格式的正则表达式

时间:2015-05-01 10:46:27

标签: javascript regex

我们有一个网络应用程序,允许客户将一些CSV数据导入我们的数据库,例如他们销售的产品清单。

问题是,我们希望按原样存储他们的数据,但是让用户指定一个自定义表达式,这样当他们查看数据时,它看起来会更好。

某些导入的数据可能如下所示:

product_label,quantity
A: Product1- 001,50
A: Product2- 001,80
A: Product3- 001,150
B: Product5- 001,100

在这种情况下,客户可能希望删除前缀' A:' 和后缀'字符串' A:Product1- 001' 中的字符串为001' ,因此只有' Product1' 为显示。

问题是,每个客户端似乎都有不同的字符串格式和所需的输出格式。

我正在考虑提供指定正则表达式以使用javascript纯粹在客户端格式化字符串的能力,但我不确定如何使用此正则表达式以及如何允许它们指定分组或返回-references。

有关如何让他们指定自己的格式的任何建议?例如类似的东西:

match_pattern =  ... // input field text (escaped into a regex)
output_pattern = ... // How to let them specify the output from the match results?
display_string = applyFormatting(string, match_pattern, output_pattern);

1 个答案:

答案 0 :(得分:1)

这是一些用于分割字符串的正则表达式。

// Set the original string
var strOriginal = 'B: Product5- 001,100';

// Settings to specify which parts they want
var bln = [];
bln[0] = true;
bln[1] = true;
bln[2] = false;
bln[3] = false;

// Split the orginal string up
var str = []
str[0] = strOriginal.replace(/([A-Z]\:\s)([A-Za-z0-9]+?)(\-\s[\d]+?)(\,[\d]+)/,'$1');
str[1] = strOriginal.replace(/([A-Z]\:\s)([A-Za-z0-9]+?)(\-\s[\d]+?)(\,[\d]+)/,'$2');
str[2] = strOriginal.replace(/([A-Z]\:\s)([A-Za-z0-9]+?)(\-\s[\d]+?)(\,[\d]+)/,'$3');
str[3] = strOriginal.replace(/([A-Z]\:\s)([A-Za-z0-9]+?)(\-\s[\d]+?)(\,[\d]+)/,'$4');

var strOutput = '';

for (i = 0; i < str.length; i++) { 
    if (bln[i]) {
        strOutput += str[i] + '<br />';  
    }
}

document.getElementById('test').innerHTML = strOutput;
<div id="test"></div>