iş yapacağını bu regex: Bu iç içe geçmiş OR (|
) ifadesindeki tüm olası 3 karakterli alt dizeleri alır ve 'patates' sonraki tüm karakterleri ile eşleşen
(((pota?|ota)t?|tat)o?|ato)
eğer mevcutlarsa (isteğe bağlı).
Bu ifadede, kullanıcı tarafından sağlanan herhangi bir arama öğesinden dinamik olarak oluşturulabilmesi için yinelenebilir bir mantık vardır.
Bunu göstermek için, burada yalnızca bunu yapan canlı bir JavaScript snippet'i var. Bir arama dizesi ve aranacak metni girmenizi sağlar. Daha sonra düzenli ifadeyi çıkarır ve eşleştirilen metin parçalarını vurgulayarak uygular.
düzenli ifadeleri destekleyen başka bir dile tercüme etmek kolay olacaktır:
// Core function
function buildRegexFor(find) {
var regexStr = find.substr(0,3);
for (var i = 1; i < find.length - 2; i++) {
regexStr = '(' + regexStr + find.substr(i+2,1) + '?|' + find.substr(i,3) + ')';
}
return regexStr;
}
// Handle button click event
document.querySelector('button').onclick = function() {
// (1) read input
var find = document.querySelector('input').value;
var str = document.querySelector('textarea').value;
// (2) build regular expression using above function
var regexStr = buildRegexFor(find);
// (3) apply regular expression to text and highlight all found instances
str = str.replace(new RegExp(regexStr, 'g'), "<b>$1</b>");
// (4) output
document.querySelector('span').textContent = regexStr;
document.querySelector('div').innerHTML = str;
};
b { background: yellow }
Value to find:<br>
<input value="potato"><br>
<button>find</button><br>
Text to find in:<br>
<textarea cols=40>There is a spot in the botanic garden
on this atol that beats all stats as it rotates potatoes.</textarea><br>
Regex: <span></span><br>
<div></div>
sonra maksimum uzunluğu alt dize arıyor tüm eğer dize uzunluğu olmalıdır ait
İlk . Bu durumda 6. –
Belki de özyinelemeli olarak örn. eğer [i] ile işlenirse, s [i + 1] ile arayın? –
Giriş kaynağı nedir? Kullanıcı? Ve kullanıcı girilen dizgenin alt dizesini nerede arar? –