2010-09-03 6 views
0
var string = $.trim("How are you ? are you fine ?"); 
var part = $.trim("How are you ? are you fine ?"); 

var SearchResult = string.match(part); 

if (SearchResult != null && part!="") { 
    alert("hello1"); 
} 


string = $.trim("How are you ? a"); 
part = $.trim("How are you ? a"); 

SearchResult = string.match(part); 

if (SearchResult != null && part!="") { 
    alert("hello2"); 
} 

string = $.trim("How are you ?"); 
part = $.trim("How are you ?"); 

SearchResult = string.match(part); 

if (SearchResult != null && part!="") { 
    alert("hello3"); 
} 

Seule la troisième alerte fonctionne; quel est le problème en première et deuxième chaîne?J'ai un problème avec string.match (partie) (javascript)

Répondre

2

Je pense que le problème est que vous avez un point d'interrogation dans la chaîne qui est analysée comme un caractère regex spécial. Vous devriez essayer de l'échapper comme \?.

0

devrait être:

part = $.trim("How are you \\? a") 
1

Lorsque match est appelé avec un objet non-RegExp, il est converti en un RegExp:

Si un objet non RegExp obj est passé, il est implicitement converti en RegExp en utilisant new RegExp(obj).

Cela signifie que depuis ? est un caractère spécial dans les expressions régulières (ce qui signifie l'expression précédente peut être répétée zéro ou une fois), vous devez échapper avec \?. Et puisque le \ doit également être échappé dans les déclarations de chaîne, vous aurez besoin:

var part = $.trim("How are you \\? are you fine \\?"); 

Une façon plus facile serait d'utiliser indexOf qui retourne l'index du début du match et -1 s'il n'y avait pas de match:

string.indexOf(part) > -1 
0

En fait, les deux premières alertes fonctionnent correctement; le troisième ne correspond que par accident. Si vous imprimez le résultat du match, vous verrez qu'il n'y a pas de point d'interrogation à la fin. Comme les autres répondeurs l'ont dit, ? est un metacharacter, donc /How are you ?/ correspond à la séquence "How are you", éventuellement suivie d'un espace. Comme les autres l'ont dit, si vous voulez faire correspondre un point d'interrogation littéral, vous devez y échapper. Et si vous voulez forcer l'expression rationnelle à correspondre à toute la chaîne ou rien, vous devez l'ancrer aux deux extrémités:

/^How are you \?$/