ref:
Wie durchsucht man in Javascript ein Array nach einer Teilstring-Übereinstimmung?
Die hier angegebene Lösung ist generisch im Gegensatz zur Lösung 4556343 # 4556343 , für die eine vorherige Analyse erforderlich ist, um eine Zeichenfolge zu identifizieren, mit der zu arbeiten ist join()
, die keine Komponente einer der Array-Zeichenfolgen ist.
Außerdem ist dieser Code /!id-[^!]*/
korrekter, /![^!]*id-[^!]*/
um den Fragenparametern zu entsprechen:
- "Suche ein Array ..." (von Zeichenfolgen oder Zahlen und nicht von Funktionen, Arrays, Objekten usw.)
- "Damit nur ein Teil der Zeichenfolge übereinstimmt" (Übereinstimmung kann überall sein)
- "Rückgabe des ... übereinstimmenden ... Elements" (Singular, nicht ALL, wie in "... the ... elementS")
- "mit der vollen Zeichenfolge" (einschließlich Anführungszeichen)
... NetScape / FireFox-Lösungen (siehe unten für a JSON
Lösung):
javascript:
alert(
["x'!x'\"id-2",'\' "id-1 "', "item","thing","id-3-text","class" ] .
toSource() . match( new RegExp(
'[^\\\\]("([^"]|\\\\")*' + 'id-' + '([^"]|\\\\")*[^\\\\]")' ) ) [1]
);
oder
javascript:
ID = 'id-' ;
QS = '([^"]|\\\\")*' ;
RE = '[^\\\\]("' +QS+ ID +QS+ '[^\\\\]")' ;
RE = new RegExp( RE ) ;
RA = ["x'!x'\"id-2",'\' "id-1 "', "item","thing","id-3-text","class" ] ;
alert(RA.toSource().match(RE)[1]) ;
Anzeigen "x'!x'\"id-2"
.
Vielleicht ist es "sauberer", das Array zu durchsuchen, um ALLE Übereinstimmungen zu finden.
javascript:
RA = ["x'!x'\"id-2",'\' "id-1 "', "item","thing","id-3-text","class" ] ;
function findInRA(ra,id){
ra.unshift(void 0) ;
return ra . toSource() . match( new RegExp(
'[^\\\\]"' + '([^"]|\\\\")*' + id + '([^"]|\\\\")*' + '[^\\\\]"' ,
'g' ) ) ;
}
alert( findInRA( RA, 'id-' ) . join('\n\n') ) ;
zeigt an:
"x '! x'" id-2 "
"'" id-1 ""
"id-3-text"
Verwenden von JSON.stringify()
:
javascript:
RA = ["x'!x'\"id-2",'\' "id-1 "', "item","thing","id-3-text","class" ] ;
function findInRA(ra,id){
return JSON.stringify( ra ) . match( new RegExp(
'[^\\\\]"([^"]|\\\\")*' + id + '([^"]|\\\\")*[^\\\\]"' ,
'g' ) ) ;
}
alert( findInRA( RA, 'id-' ) . join('\n\n') ) ;
zeigt an:
["x '! x'" id-2 "
, "'" id-1 ""
, "id-3-text"
Falten:
- Das "unescaped" globale RegExp ist
/[^\]"([^"]|\")*id-([^"]|\")*[^\]"/g
mit dem \
buchstäblich zu finden. Um ([^"]|\")*
Zeichenfolgen mit allen "
als maskierten Zeichenfolgen abzugleichen \"
, \
muss die selbst als maskiert werden ([^"]|\\")*
. Wenn dies als zu verkettende Zeichenfolge bezeichnet wird id-
, \
muss jede erneut maskiert werden([^"]|\\\\")*
!
- Eine Suche ,
ID
die hat eine \
, *
, "
, ..., muss auch über entwertet werden .toSource()
oder JSON
oder ....
null
Suchergebnisse sollten zurückgeben ''
(oder ""
wie in einer LEEREN Zeichenfolge, die NO enthält "
!) oder []
(für alle Suchvorgänge).
- Wenn die Suchergebnisse zur weiteren Verarbeitung in den Programmcode aufgenommen werden sollen,
eval()
ist z eval('['+findInRA(RA,ID).join(',')+']')
.
-------------------------------------------------- ------------------------------
Exkurs:
Überfälle und Fluchten? Ist dieser Code in Konflikt geraten?
Die Semiotik, Syntax und Semantik des /* it has no ... =! */
nachdrücklichen Konflikts wird deutlich.
Bedeutet "nein =":
- "no '=' sign" wie in
javascript:alert('\x3D')
(Not! Führen Sie es aus und sehen Sie, dass es gibt!),
- "keine Javascript-Anweisung mit dem Zuweisungsoperator",
- "nicht gleich" wie in "nichts identisch in einem anderen Code" (frühere Codelösungen zeigen, dass es funktionale Äquivalente gibt),
- ...
Das Zitieren auf einer anderen Ebene kann auch mit den unten aufgeführten Javascript-Protokoll-URIs im Sofortmodus erfolgen. (// Kommentare enden in einer neuen Zeile (auch bekannt als nl, Strg-J, LineFeed, ASCII-Dezimalzahl 10, Oktal 12, Hex A). Dies erfordert ein Anführungszeichen, da durch Einfügen eines nl durch Drücken der Eingabetaste der URI aufgerufen wird.)
javascript: alert('visible') ;
javascript:
javascript:
javascript:
Hinweis: Schneiden Sie eine der javascript:
Zeilen aus und fügen Sie sie als URI im Sofortmodus ein (zumindest höchstens? In FireFox), um sie zuerst javascript:
als URI-Schema oder -Protokoll und den Rest als JS-Beschriftung zu verwenden.
results = arr.filter(function (v) {return /id-/.test(v)});
. Und dann können Sie mit den Ergebnissen machen, was Sie wollen.