2015-05-01 25 views
2

我們有一個網絡應用程序,允許客戶將一些CSV數據導入到我們的數據庫中,例如,他們出售的產品清單。用戶可自定義的字符串格式化正則表達式

問題是,我們想按原樣存儲他們的數據,但讓用戶指定一個自定義表達式,這樣當他們查看數據時,它看起來會更好一些。

一些進口數據可能是這樣的:

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

在這種情況下,客戶可能想要刪除前綴「答:」和後綴- 字符串中「001」 ''A:Product1-001',這樣只顯示'Product1'

問題是,每個客戶似乎有不同的字符串格式和所需的輸出格式。

我正在考慮提供指定一個正則表達式的能力來純粹在客戶端使用javascript來設置字符串的格式,但我不知道如何使用此正則表達式以及如何讓它們指定分組或備份 - 引用。

有關如何讓他們指定自己的格式的任何建議?例如像這樣:

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

請問我的回答幫助呢? –

+0

您的答案是一個很好的開始,但如果可能,我希望用戶轉到_product \ _label_的列顯示設置,併爲_match pattern_和_display pattern_提供一個輸入。匹配模式絕對可以是一個正則表達式,它們有自己編寫的一些顯式分組,但是是否有內置的機制來使用regex-exec分組數組並將其插入到自定義的顯示模式中? – J3Y

+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>

相關問題