2016-12-28 77 views
0

我知道有這個稱號回答了很多問題,但我還沒有發現任何適合什麼我正在尋找...與正則表達式(JavaScript)的可變

我需要使用正則表達式這樣「/ ^用戶輸入$ /我「用戶輸入可以將*正則表達式字符放在文本的前面或後面。

如果我使用「新的RegExp(用戶輸入,」我「)」沒有達到^和$和用戶正則表達式字符*的要求。

我有這樣的事情:

var foo = {User input}; 

var arr = ['Lorem Ipsum', 'simply dummy text', 'nothing']; 

arr = arr.filter(function(item){ 
    return /^{foo content here}$/i.test(item); 
}); 

測試:

foo = "Lorem" -> array[] 
foo = "Lorem*" -> array['Lorem Ipsum'] 
foo = "Dummy" -> array[] 
foo = "*Dummy*" -> array['simply dummy text'] 
foo = "*" -> array['Lorem Ipsum', 'simply dummy text', 'nothing'] 

非常感謝。

+0

'如果我使用了 「新的正則表達式(用戶輸入 」I「),」 不完成的要求^和$'然後做'新的RegExp(「^ 「+ userInput +」$「,」i「)'。 '和用戶正則表達式字符*' - 這是什麼? – vlaz

+3

似乎XY的問題。你究竟想要達到什麼目的? – Satpal

+0

爲了簡化,我有一個名稱數組,用戶執行一個確切的搜索,除非它使用正則表達式字符「*」 – user7349564

回答

0

您可以使用'^' + foo + '$',但應該防止無效的正則表達式。喜歡的東西:

var arr = ['Lorem Ipsum', 'simply dummy text', 'nothing']; 
 

 
function userInput(foo) { 
 
    var re = null; 
 
    try { 
 
    re = /[*+.]/.test(foo) 
 
     ? RegExp(foo, 'i') 
 
     : RegExp('^' + foo + '$', 'i'); } 
 
    catch(err) { 
 
    return '<i style="color:red">' + err.message +'</i>'; 
 
    } 
 
    var filtered = arr.filter(function(item){ return re.test(item); }); 
 
    return filtered.length 
 
    ? '<b style="color:green">[' + filtered.join() + ']</b>' 
 
    : '<b style="color:orange">*nothing found*</b>' 
 
} 
 

 
document.querySelector('#result').innerHTML = 
 
    'Lorem -> ' + userInput('Lorem') + '\n' + 
 
    'Lorem* -> ' + userInput('Lorem*') + '\n' + 
 
    '*Lorem* -> ' + userInput('*Lorem*') + '\n' + 
 
    'Dummy -> ' + userInput('Dummy') + '\n' + 
 
    '*Dummy.* -> ' + userInput('*Dummy.*') + '\n' + 
 
    '.*Dummy -> ' + userInput('.*Dummy') + '\n' + 
 
    '* -> ' + userInput('*') + '\n' + 
 
    '+ -> ' + userInput('+') + '\n' + 
 
    'd.+ -> ' + userInput('d.+') + '\n' + 
 
    'ips.+$ ->' + userInput('ips.+$') + '\n' + 
 
    'ip.m ->' + userInput('ip.m') + '\n' + 
 
    'i*mp ->' + userInput('i*mp') + '\n' + 
 
    '.* -> ' + userInput('.*');
<pre id=result></pre>

+0

非常感謝它的工作原理 – user7349564