답변:
.toLowerCase()
이후에 추가하십시오 referrer
. 이 방법은 문자열을 소문자 문자열로 바꿉니다. 그런 다음, 사용 .indexOf()
사용 ral
대신에 Ral
.
if (referrer.toLowerCase().indexOf("ral") === -1) {
정규 표현식을 사용하여 동일한 결과를 얻을 수도 있습니다 (동적 패턴을 테스트하려는 경우 특히 유용함).
if (!/Ral/i.test(referrer)) {
// ^i = Ignore case flag for RegExp
.search
방법을 사용하십시오 .var index = referrer.search(/Ral/i);
다른 옵션은 다음과 같이 검색 방법을 사용하는 것입니다.
if (referrer.search(new RegExp("Ral", "i")) == -1) { ...
전체 문자열을 소문자로 변환하면 더 우아해 보이고 더 효율적일 수 있습니다.
함께 toLowerCase()
코드 문자열을 통해 두 개의 패스를 한 번 패스를 소문자로 변환 할 전체 문자열에 다른 원하는 색인을 찾는 것입니다. 코드를
사용 RegExp
하면 원하는 인덱스와 일치하는 문자열을 한 번 전달합니다.
따라서 긴 문자열의 경우 RegExp
버전 을 사용하는 것이 좋습니다 (짧은 문자열의 경우이 효율성은 RegExp
객체 를 생성하는 것으로 인해 발생 합니다)
RegExp을 사용하십시오.
if (!/ral/i.test(referrer)) {
...
}
또는 다음을 사용하십시오 .toLowerCase()
.
if (referrer.toLowerCase().indexOf("ral") == -1)
ES2016부터는 약간 더 좋고, 더 쉽고, 더 우아한 방법을 사용할 수 있습니다 (대소 문자 구분) :
if (referrer.includes("Ral")) { ... }
또는 (대소 문자 구분) :
if (referrer.toLowerCase().includes(someString.toLowerCase())) { ... }
https://dev.to/adroitcoder/includes-vs-indexof-in-javascript의 비교는 다음 .indexOf()
과 .includes()
같습니다.
includes
이다 대소 문자를 구분 시도 : 크롬 'fooBar'.includes('bar')
> ==false
여기에는 몇 가지 접근 방식이 있습니다.
이 인스턴스에 대해 대소 문자를 구분하지 않고 점검하려면 다음과 같이하십시오.
if (referrer.toLowerCase().indexOf("Ral".toLowerCase()) == -1) {
...
또는이 확인을 정기적으로 수행하는 경우에 새로운 indexOf()
방법을 추가 할 수 String
있지만 대소 문자를 구분하지 않아도됩니다.
String.prototype.indexOfInsensitive = function (s, b) {
return this.toLowerCase().indexOf(s.toLowerCase(), b);
}
// Then invoke it
if (referrer.indexOfInsensitive("Ral") == -1) { ...
defineProperty
것이 좋습니다 Object.defineProperty(String.prototype, 'indexOfInsensitive', {value: function(s,b){return this.toLowerCase().indexOf((s+'').toLowerCase(),b);}});
. 두 업데이트 : 명시 문자열 변환하여 (s+'')
루프에서, 비 열거 ( for(var i in '') ...
표시되지 않습니다 indexOfInsensitive
.
if (referrer.toUpperCase().indexOf("RAL") == -1) { ...
당신은 이것을 시도 할 수 있습니다
str = "Wow its so COOL"
searchStr = "CoOl"
console.log(str.toLowerCase().includes(searchStr.toLowerCase()))
모든 언어의 예 :
'My name is Хведор'.toLocaleLowerCase().includes('ХвЕдОр'.toLocaleLowerCase())
2016 년이며 어떻게 할 수있는 명확한 방법이 없습니까? 나는 copypasta를 바라고 있었다. 갈 게요
디자인 노트 : 메모리 사용을 최소화하고 속도를 향상 시키려고했기 때문에 문자열의 복사 / 돌연변이가 없습니다. V8 (및 기타 엔진)이이 기능을 최적화 할 수 있다고 가정합니다.
//TODO: Performance testing
String.prototype.naturalIndexOf = function(needle) {
//TODO: guard conditions here
var haystack = this; //You can replace `haystack` for `this` below but I wan't to make the algorithm more readable for the answer
var needleIndex = 0;
var foundAt = 0;
for (var haystackIndex = 0; haystackIndex < haystack.length; haystackIndex++) {
var needleCode = needle.charCodeAt(needleIndex);
if (needleCode >= 65 && needleCode <= 90) needleCode += 32; //ToLower. I could have made this a function, but hopefully inline is faster and terser
var haystackCode = haystack.charCodeAt(haystackIndex);
if (haystackCode >= 65 && haystackCode <= 90) haystackCode += 32; //ToLower. I could have made this a function, but hopefully inline is faster and terser
//TODO: code to detect unicode characters and fallback to toLowerCase - when > 128?
//if (needleCode > 128 || haystackCode > 128) return haystack.toLocaleLowerCase().indexOf(needle.toLocaleLowerCase();
if (haystackCode !== needleCode)
{
foundAt = haystackIndex;
needleIndex = 0; //Start again
}
else
needleIndex++;
if (needleIndex == needle.length)
return foundAt;
}
return -1;
}
이름에 대한 나의 이유 :
왜 안 ... :
toLowerCase()
-동일한 문자열에서 잠재적으로 반복되는 toLowerCase 호출.RegExp
-변수로 검색하기 어색합니다. RegExp 객체조차도 문자를 이스케이프 처리하는 것이 어색합니다.더 나은 검색을하려면 다음 코드를 사용하십시오.
var myFav = "javascript";
var theList = "VB.NET, C#, PHP, Python, JavaScript, and Ruby";
// Check for matches with the plain vanilla indexOf() method:
alert( theList.indexOf( myFav ) );
// Now check for matches in lower-cased strings:
alert( theList.toLowerCase().indexOf( myFav.toLowerCase() ) );
첫 번째 alert ()에서 JavaScript는 "-1"을 반환했습니다. 즉, indexOf ()는 일치하는 항목을 찾지 못했습니다. 이는 단순히 "JavaScript"가 첫 번째 문자열에서 소문자이고 두 번째 문자열에서 올바르게 대문자로 표시 되었기 때문입니다. indexOf ()를 사용하여 대소 문자를 구분하지 않는 검색을 수행하기 위해 두 문자열을 모두 대문자 또는 소문자로 만들 수 있습니다. 즉, 두 번째 alert ()에서와 같이 JavaScript는 찾고자하는 문자열의 발생 만 확인하고 대문자는 무시합니다.
참조, http://freewebdesigntutorials.com/javaScriptTutorials/jsStringObject/indexOfMethod.htm
여기 내 테이크가있다 :
스크립트 :
var originalText = $("#textContainer").html()
$("#search").on('keyup', function () {
$("#textContainer").html(originalText)
var text = $("#textContainer").html()
var val = $("#search").val()
if(val=="") return;
var matches = text.split(val)
for(var i=0;i<matches.length-1;i++) {
var ind = matches[i].indexOf(val)
var len = val.length
matches[i] = matches[i] + "<span class='selected'>" + val + "</span>"
}
$("#textContainer").html(matches.join(""))
HTML :
<input type="text" id="search">
<div id="textContainer">
lorem ipsum is simply dummy text of the printing and typesetting industry. lorem ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of letraset sheets containing lorem ipsum passages, and more recently with desktop publishing software like Aldus pagemaker including versions of lorem ipsum.</div>
RegExp
사용자 입력에서 직접 생성하는 함정을 명심해야 합니다. 예를 들어, 사용자가 입력*
할 수 있으며RegExp
생성자 에 오류가 발생합니다 . 허용 된 솔루션에는이 문제가 없습니다.