2012-04-08 12 views
1

Wie zu erkennen, ob Bespannbild mit JavaScript enthält:erkennen, ob Bespannbild enthält

1. string1='Lorem'; string2="foo"; 
2. do nothing; 
3. string1='ipsum'; string2="foo"; 
4. string1='dolor'; string2="foo1"; 
5. do nothing; 
6. do nothing; 
7. do nothing; 
... 

Dies wäre ein Teil des Skripts:

1. input="[Lorem]foo"; 
2. input="[ ]"; 
3. input="[ipsum]foo"; 
4. input="[dolor]foo1"; 
5. input="[sit ]foo2"; 
6. input="[ amet]foo3"; 
7. input="amet]foo3"; 
... 

Script input auf diese Weise verarbeitet werden soll ...

input = "[asd]qwe"; 
input2 = "qwe"; 

processit(input); 
processit(input2); 

function processit(e){ 

    if(..???..){ 
     alert(string1); 
     alert(string2); 
    } 
    else { 
     return false; 
    } 

} 

Vielen Dank für Ihre Zeit.


EDIT: Lösung muss Cross-Browser

IE7 +

Firefox 3.6+

Chrome 7+ ...

+0

Eine Art schwer zu sehen, was scheint das Problem zu sein! Wenn Sie Informationen über Regular Expression - [MDN RegEx] (https://developer.mozilla.org/en/JavaScript/Guide/Regular_Expressions) und eine [RegEx-Site zugewiesene Site benötigen (http://www.regular-expressions.org). info/javascript.html) – Bakudan

Antwort

4

jsbin code

Diese Regex das Ergebnis erreichen sollte: /\[([a-zA-Z0-9]+)\]([a-zA-Z0-9]+)/

+1

Diese '[^ \ s]' Konstrukte sollten nicht da sein. Sie sagen es bereits, alphanumerische Zeichen und nichts anderes mit '[a-zA-Z0-9] +' zu vergleichen; es gibt keine Notwendigkeit, es zu sagen * nicht * Whitespace zu entsprechen. Außerdem müssen Sie die erste Zeichenfolge mindestens drei Zeichen lang haben und das letzte Zeichen löschen, da das zweite Zeichen [^ \ s] 'außerhalb der Erfassungsgruppe liegt. –

+0

@AlanMoore: Korrigiert die Regex, danke – dhinesh

+0

'\ w' wird anstelle von jedem funktionieren [[a-zA-Z0-9]' - es ist äquivalent zu '[a-zA-Z0-9_]'. Da Sie nur die ganze Zeichenfolge abgleichen möchten, sollte die Regex mit '^' beginnen und mit '$' enden. –

1

Sie können in Anspruch nehmen, wie split() arbeitet mit Erfassungsgruppen.

var pieces = str.split(/\[(\w+?)\]/); 

Sie können einige leere Zeichenfolgenwerte erhalten. Sie können sie entfernen mit ...

pieces.filter(function(piece) { return piece; }); 

jsFiddle.

+0

Es funktioniert nicht im Internet Explorer. 'Webpage error details Nachricht: Objekt unterstützt diese Eigenschaft oder Methode nicht 'Vorschläge? – enloz

+0

@enloz Sie können [shim] (http://blog.stevenlevithan.com/archives/cross-browser-split) 'split()' verwenden, um es im IE zu verwenden. – alex

+1

Ich würde mir vorstellen, dass 'pieces.filter' ist das Stück nicht von IE unterstützt. –

0

Ihre tatsächlichen Anforderungen sind unklar, so vermute ich. Im Folgenden werden nur nicht-leere alphanumerische plus-underScore-Strings innerhalb und hinter den Klammern erlaubt, und es wird versucht, die gesamte Zeichenfolge und nicht mehrere Vorkommen in einer längeren Zeichenfolge zu finden.

var input = "[Lorem]foo"; 
var string1, string2; 
var result = /^\[(\w+)\](\w+)$/i.exec(input); 
if (result) { 
    string1 = result[1]; 
    string2 = result[2]; 
} 
alert(string1 + ", " + string2);