2017-09-21 1 views
0

Ich bin auf der Suche nach einer Lösung, um die Existenz von bestimmten Zeichen in einer Zeichenfolge zu suchen. Das bedeutet, wenn eines der gegebenen Zeichen in einer Zeichenfolge vorhanden ist, sollte es wahr zurückgeben.So finden Sie eines der spezifischen Zeichen in einer Zeichenfolge

Jetzt mache ich es mit Arrays und Schleifen. Aber ehrlich gesagt, ich fühle es ist kein guter Weg. Gibt es einen einfachen Weg ohne Array oder Loop?

var special = ['$', '%', '@']; 
 
var mystring = ' using it to replace VLOOKUP entirely.$ But there are still a few lookups that you are not sure how to perform. Most importantly, you would like to be able to look up a value based on multiple criteria within separate columns.'; 
 
var exists = false; 
 
$.each(special, function(index, item) { 
 
    if (mystring.indexOf(item) >= 0) { 
 
    exists = true; 
 
    } 
 
}); 
 
console.info(exists);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

+8

Reguläre Ausdrücke ist genau das, was Sie hier benötigen: 'existiert =/[$% @]/Test (mystring)' – georg

+0

Das ist perfekt ... Vielen Dank.. Bitte machen Sie es als Antwort, anstatt zu kommentieren –

Antwort

0

Der beste Weg ist, reguläre Ausdrücke zu verwenden. Sie können mehr darüber lesen here.

In Ihrem Fall sollen Sie etwas tun:

const specialCharacters = /[$%@]/; 
const myString = ' using it to replace VLOOKUP entirely.$ But there are still a few lookups that you are not sure how to perform. Most importantly, you would like to be able to look up a value based on multiple criteria within separate columns.'; 
if(specialCharacters.test(myString)) { 
    console.info("Exists..."); 
} 

Bitte beachten Sie, dass es guter Ansatz ist regulären Ausdrücke in einer Variablen zu speichern, zu verhindern, dass der regulären Ausdrucks zu schaffen (was nicht der schnellste Betrieb) jedes Mal, wenn Sie es verwenden.

1

versuchen mit regex

var patt = /[$%@]/; 
 
console.log(patt.test("using it to replace VLOOKUP entirely.$ But there are still a few lookups that you are not sure how to perform. Most importantly, you would like to be able to look up a value based on multiple criteria within separate columns."));

1

Beachten Sie, dass [x] in REGEX nur für einzelne Zeichen ist.

Wenn Sie sagen, wollte nach say replace suchen, wird es nach etwas suchen mit 'r, e, p, l, a, c' in der Zeichenfolge.

Eine andere Sache bewusst zu sein, mit REGEX entweicht. Verwenden Sie eine einfache Escape-RegEx hier gefunden ->Is there a RegExp.escape function in Javascript? Ich habe eine generische Suche in String gemacht.

Natürlich fragte man given characters in a string, so ist dies eher eine addenum Antwort für jedermann auf SO diesen Beitrag zu finden. Wenn Sie Ihre ursprüngliche Frage nach einem Array von Strings betrachten, könnte es für die Leute leicht sein zu glauben, dass Sie das einfach an das RegEx weitergeben könnten. IOW: Deine Frage war nicht, wie ich herausfinden kann, ob $,%, @ in einer Zeichenkette vorkommen.

var mystring = ' using it to replace VLOOKUP entirely.$ But there are still a few lookups that you are not sure how to perform. Most importantly, you would like to be able to look up a value based on multiple criteria within separate columns.'; 
 

 
function makeStrSearchRegEx(findlist) { 
 
    return new RegExp('('+findlist.map(
 
    s=>s.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&')).join('|')+')'); 
 
} 
 

 
var re = makeStrSearchRegEx(['$', '%', '@', 'VLOOKUP']); 
 

 

 
console.log(re.test(mystring)); //true 
 
console.log(re.test('...VLOOKUP..')); //true 
 
console.log(re.test('...LOOKUP..')); //false

+0

Guter Versuch, es zu erweitern, aber ich würde [dieses] (https://stackoverflow.com/a/3561711/989121) für die Flucht verwenden. – georg

+0

Cheers @georg Ich habe diese Modifikation in .. – Keith

Verwandte Themen