2012-03-08 21 views
5

Próbuję pobrać wartość z pola tekstowego wejściowego i użyć go w wyrażeniu regularnym. Oto, co muszę dopasować do początku linii.Ucieknij zmiennej w wyrażeniu regularnym

regex = new RegExp('^' + inputValue, 'i') 

To działa dobrze dla zwykłych strun, które zaczynają mieć znaków alfanumerycznych, ale używam tego dla kwot w dolarach, jak również. Gdy pole wejściowe zaczyna się od znaku "$" (znak dolara), uzyskuję różne wyniki.

Jak mogę uciec powyższej zmiennej, aby być postrzeganym jako prosty ciąg? Próbowałem, ale bez powodzenia:

regex = new RegExp('^[' + inputValue + ']', 'i') 
+0

PHP 'preg_quote ', Nie sądzę, JavaScript ma jeden. Funkcja PHP ucieka '. \ + *? [^] $() {} =! < > | : -', więc myślę, że po prostu "zamień" te z ich wersjami ucieczkowymi. –

+2

Spójrz na odpowiedź w tym pytaniu http://stackoverflow.com/questions/3614440/replicate-functionality-of-javas-pattern-quote-in-a-javascript-regexp – Danny

+1

[This] (http: // simonwillison.net/2006/Jan/20/escape/#p-6). – pimvdb

Odpowiedz

3

Prawdopodobnie jeden z lepszych implementacji widziałem

http://phpjs.org/functions/preg_quote:491

przytoczone poniżej dla potomnych

function preg_quote (str, delimiter) { 
    // Quote regular expression characters plus an optional character 
    // 
    // version: 1109.2015 
    // discuss at: http://phpjs.org/functions/preg_quote // + original by: booeyOH 
    // + improved by: Ates Goral (http://magnetiq.com) 
    // + improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net) 
    // + bugfixed by: Onno Marsman 
    // + improved by: Brett Zamir (http://brett-zamir.me) // *  example 1: preg_quote("$40"); 
    // *  returns 1: '\$40' 
    // *  example 2: preg_quote("*RRRING* Hello?"); 
    // *  returns 2: '\*RRRING\* Hello\?' 
    // *  example 3: preg_quote("\\.+*?[^]$(){}=!<>|:"); // *  returns 3: '\\\.\+\*\?\[\^\]\$\(\)\{\}\=\!\<\>\|\:' 
    return (str + '').replace(new RegExp('[.\\\\+*?\\[\\^\\]$(){}=!<>|:\\' + (delimiter || '') + '-]', 'g'), '\\$&'); 
} 
1

$ dopasowuje koniec linii, więc jeśli Wartość wejściowa zaczyna się od $, szukasz meczów jak ^$9.99, co oczywiście przyzwyczajenie pasują do niczego, bo 9,99 puszka Pójdzie po zakończeniu linii.

jeśli $ jest jedyną postacią martwisz, można po prostu uruchomić Wartość wejściowa przez find/zastąpić tak, że $ jest uciekł do \$.

0

Nie myślałeś tylko o sprawdzeniu, czy ciąg zaczyna się od wprowadzenia wartości indexOf?

zrobić to w następujący sposób:

var inputValue = "some"; 
if ("some string".indexOf(inputValue.toLowerCase()) == 0) { 
    // test passed 
} 
Powiązane problemy