← ECMAScript 2027 · İçindekiler
ECMA-262 · 18inci Baskı
22

Metin İşleme (Text Processing)

22.1 String (Dizgi) Nesneleri (String Objects)

22.1.1 String Yapıcısı (The String Constructor)

String yapıcısı (constructor):

  • %String% nesnesidir.

  • global nesnenin (global object) "String" özelliğinin başlangıç değeridir.

  • bir yapıcı (constructor) olarak çağrıldığında yeni bir String nesnesi oluşturur ve başlatır.

  • bir yapıcı (constructor) yerine bir işlev olarak çağrıldığında tür dönüştürme gerçekleştirir.

  • bir sınıf tanımının extends tümcesinin değeri olarak kullanılabilir. Belirtilen String davranışını miras almayı amaçlayan alt sınıf yapıcıları (constructors), alt sınıf örneğini bir [[StringData]] dahili yuvası (internal slot) ile oluşturmak ve başlatmak için String yapıcısına (constructor) yapılacak bir super çağrısı içermelidir.

22.1.1.1 String ( value )

Bu işlev çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. Eğer value mevcut değilse, o halde

    1. string, boş Dizgi (empty String) olsun.
  2. Değilse,

    1. Eğer NewTarget undefined ise ve value bir Sembol ise (is a Symbol), SymbolDescriptiveString(value) sonucunu döndür.

    2. string, ? ToString(value) olsun.

  3. Eğer NewTarget undefined ise, string döndür.

  4. StringCreate(string, ? GetPrototypeFromConstructor(NewTarget, "%String.prototype%")) sonucunu döndür.

22.1.2 String Yapıcısının Özellikleri (Properties of the String Constructor)

String yapıcısı (constructor):

  • değeri %Function.prototype% olan bir [[Prototype]] dahili yuvasına (internal slot) sahiptir.

  • aşağıdaki özelliklere sahiptir:

22.1.2.1 String.fromCharCode ( ...codeUnits )

Bu işlev, artık parametre (rest parameter) codeUnits'ı oluşturan herhangi bir sayıda argümanla çağrılabilir.

Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. result, boş Dizgi olsun.

  2. codeUnits listesinin her bir next öğesi için sırasıyla şunları yap:

    1. nextCU, sayısal değeri (? ToUint16(next)) olan kod birimi (code unit) olsun.

    2. result değerini, result ile nextCU değerlerinin dizgi birleşimi (string-concatenation) olarak ayarla.

  3. result döndür.

Bu işlevin "length" özelliği 1𝔽'dir.

22.1.2.2 String.fromCodePoint ( ...codePoints )

Bu işlev, artık parametre (rest parameter) codePoints'ı oluşturan herhangi bir sayıda argümanla çağrılabilir.

Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. result, boş Dizgi olsun.

  2. codePoints listesinin her bir next öğesi için sırasıyla şunları yap:

    1. nextCP, ? ToNumber(next) olsun.

    2. Eğer nextCP bir tam sayı Sayı (integral Number) değilse, bir RangeError istisnası fırlat.

    3. Eğer (nextCP) < 0 veya (nextCP) > 0x10FFFF ise, bir RangeError istisnası fırlat.

    4. result değerini, result ile UTF16EncodeCodePoint((nextCP)) değerlerinin dizgi birleşimi (string-concatenation) olarak ayarla.

  3. İddia et (Assert): Eğer codePoints boşsa, o halde result boş Dizgidir.

  4. result döndür.

Bu işlevin "length" özelliği 1𝔽'dir.

22.1.2.3 String.prototype

String.prototype özelliğinin başlangıç değeri String prototip nesnesidir (String prototype object).

Bu özellik { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false } özniteliklerine sahiptir.

22.1.2.4 String.raw ( template, ...substitutions )

Bu işlev, değişken sayıda argümanla çağrılabilir. İlk argüman template olup argümanlerin geri kalanı substitutions Listesini (List) oluşturur.

Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. substitutionCount, substitutions içindeki öğelerin sayısı olsun.

  2. cooked, ? ToObject(template) olsun.

  3. literals, ? ToObject(? Get(cooked, "raw")) olsun.

  4. literalCount, ? LengthOfArrayLike(literals) olsun.

  5. Eğer literalCount ≤ 0 ise, boş Dizgi döndür.

  6. result, boş Dizgi olsun.

  7. nextIndex be 0.

  8. Tekrarla:

    1. nextLiteralValue, ? Get(literals, ! ToString(𝔽(nextIndex))) olsun.

    2. nextLiteral, ? ToString(nextLiteralValue) olsun.

    3. result değerini, result ile nextLiteral değerlerinin dizgi birleşimi (string-concatenation) olarak ayarla.

    4. Eğer nextIndex + 1 = literalCount ise, result döndür.

    5. Eğer nextIndex < substitutionCount ise, o halde

      1. nextSubValue, substitutions[nextIndex] olsun.

      2. nextSub, ? ToString(nextSubValue) olsun.

      3. result değerini, result ile nextSub değerlerinin dizgi birleşimi (string-concatenation) olarak ayarla.

    6. nextIndex değerini nextIndex + 1 olarak ayarla.

22.1.3 String Prototip Nesnesinin Özellikleri (Properties of the String Prototype Object)

String prototip nesnesi:

  • %String.prototype% nesnesidir.

  • bir String egzotik nesnesidir (is a String exotic object) ve bu tür nesneler için belirtilen dahili yöntemlere sahiptir.

  • değeri boş Dizgi olan bir [[StringData]] dahili yuvasına (internal slot) sahiptir.

  • başlangıç değeri +0𝔽 olan ve öznitelikleri { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false } olan bir "length" özelliğine sahiptir.

  • değeri %Object.prototype% olan bir [[Prototype]] dahili yuvasına (internal slot) sahiptir.

Açıkça aksi belirtilmedikçe, aşağıda tanımlanan String prototip nesnesi yöntemleri genel (generic) değildir ve bunlara geçirilen this değeri, ya bir String değeri ya da bir String değerine başlatılmış bir [[StringData]] dahili yuvasına (internal slot) sahip bir nesne olmalıdır.

22.1.3.1 String.prototype.at ( index )

  1. thisValue, this değeri olsun.

  2. ? RequireObjectCoercible(thisValue) işlemini gerçekleştir.

  3. string, ? ToString(thisValue) olsun.

  4. length, string dizgisinin uzunluğu olsun.

  5. relativeIndex, ? ToIntegerOrInfinity(index) olsun.

  6. Eğer relativeIndex ≥ 0 ise, o halde

    1. k, relativeIndex olsun.
  7. Değilse,

    1. k, length + relativeIndex olsun.
  8. Eğer k < 0 veya klength ise, undefined döndür.

  9. string dizgisinin k konumundan k + 1 konumuna kadar olan alt dizgisini (substring) döndür.

22.1.3.2 String.prototype.charAt ( position )

Bu yöntem çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. thisValue, this değeri olsun.

  2. ? RequireObjectCoercible(thisValue) işlemini gerçekleştir.

  3. string, ? ToString(thisValue) olsun.

  4. position değerini ? ToIntegerOrInfinity(position) olarak ayarla.

  5. size, string dizgisinin uzunluğu olsun.

  6. Eğer position < 0 veya positionsize ise, boş Dizgi döndür.

  7. string dizgisinin position konumundan position + 1 konumuna kadar olan alt dizgisini (substring) döndür.

22.1.3.3 String.prototype.charCodeAt ( position )

Bu yöntem çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. thisValue, this değeri olsun.

  2. ? RequireObjectCoercible(thisValue) işlemini gerçekleştir.

  3. string, ? ToString(thisValue) olsun.

  4. position değerini ? ToIntegerOrInfinity(position) olarak ayarla.

  5. size, string dizgisinin uzunluğu olsun.

  6. Eğer position < 0 veya positionsize ise, NaN döndür.

  7. string içindeki position dizinindeki kod biriminin sayısal değeri için Sayı değerini (Number value for) döndür.

22.1.3.4 String.prototype.codePointAt ( position )

Bu yöntem çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. thisValue, this değeri olsun.

  2. ? RequireObjectCoercible(thisValue) işlemini gerçekleştir.

  3. string, ? ToString(thisValue) olsun.

  4. position değerini ? ToIntegerOrInfinity(position) olarak ayarla.

  5. size, string dizgisinin uzunluğu olsun.

  6. Eğer position < 0 veya positionsize ise, undefined döndür.

  7. codePoint, CodePointAt(string, position) olsun.

  8. 𝔽(codePoint.[[CodePoint]]) döndür.

22.1.3.5 String.prototype.concat ( ...args )

Bu yöntem çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. thisValue, this değeri olsun.

  2. ? RequireObjectCoercible(thisValue) işlemini gerçekleştir.

  3. string, ? ToString(thisValue) olsun.

  4. result, string olsun.

  5. args listesinin her bir next öğesi için sırasıyla şunları yap:

    1. nextString be ? ToString(next).

    2. result değerini, result ile nextString değerlerinin dizgi birleşimi (string-concatenation) olarak ayarla.

  6. result döndür.

Bu yöntemin "length" özelliği 1𝔽'dir.

22.1.3.6 String.prototype.constructor

String.prototype.constructor özelliğinin başlangıç değeri %String% nesnesidir.

22.1.3.7 String.prototype.endsWith ( searchString [ , endPosition ] )

Bu yöntem çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. thisValue, this değeri olsun.

  2. ? RequireObjectCoercible(thisValue) işlemini gerçekleştir.

  3. string, ? ToString(thisValue) olsun.

  4. isRegexp, ? IsRegExp(searchString) olsun.

  5. Eğer isRegexp true ise, bir TypeError istisnası fırlat.

  6. searchString değerini ? ToString(searchString) olarak ayarla.

  7. length, string dizgisinin uzunluğu olsun.

  8. Eğer endPosition undefined ise, position, length olsun; aksi takdirde position, ? ToIntegerOrInfinity(endPosition) olsun.

  9. end, position değerinin 0 ile length arasında sınırlandırılması (clamping) sonucu olsun.

  10. searchLength, searchString dizgisinin uzunluğu olsun.

  11. Eğer searchLength = 0 ise, true döndür.

  12. start, end - searchLength olsun.

  13. Eğer start < 0 ise, false döndür.

  14. substring, string dizgisinin start konumundan end konumuna kadar olan alt dizgisi (substring) olsun.

  15. Eğer substring, searchString ile aynı ise, true döndür.

  16. false döndür.

22.1.3.8 String.prototype.includes ( searchString [ , position ] )

Bu yöntem çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. thisValue, this değeri olsun.

  2. ? RequireObjectCoercible(thisValue) işlemini gerçekleştir.

  3. string, ? ToString(thisValue) olsun.

  4. isRegexp, ? IsRegExp(searchString) olsun.

  5. Eğer isRegexp true ise, bir TypeError istisnası fırlat.

  6. searchString değerini ? ToString(searchString) olarak ayarla.

  7. positionInt, ? ToIntegerOrInfinity(position) olsun.

  8. İddia et (Assert): Eğer position undefined ise, o halde positionInt 0'dır.

  9. length, string dizgisinin uzunluğu olsun.

  10. start, positionInt değerinin 0 ile length arasında sınırlandırılması (clamping) sonucu olsun.

  11. index, StringIndexOf(string, searchString, start) olsun.

  12. Eğer index not-found ise, false döndür.

  13. true döndür.

22.1.3.9 String.prototype.indexOf ( searchString [ , position ] )

Bu yöntem çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. thisValue, this değeri olsun.

  2. ? RequireObjectCoercible(thisValue) işlemini gerçekleştir.

  3. string, ? ToString(thisValue) olsun.

  4. searchString değerini ? ToString(searchString) olarak ayarla.

  5. positionInt, ? ToIntegerOrInfinity(position) olsun.

  6. İddia et (Assert): Eğer position undefined ise, o halde positionInt 0'dır.

  7. length, string dizgisinin uzunluğu olsun.

  8. start, positionInt değerinin 0 ile length arasında sınırlandırılması (clamping) sonucu olsun.

  9. result, StringIndexOf(string, searchString, start) olsun.

  10. Eğer result not-found ise, -1𝔽 döndür.

  11. 𝔽(result) döndür.

22.1.3.10 String.prototype.isWellFormed ( )

Bu yöntem çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. thisValue, this değeri olsun.

  2. ? RequireObjectCoercible(thisValue) işlemini gerçekleştir.

  3. string, ? ToString(thisValue) olsun.

  4. IsStringWellFormedUnicode(string) sonucunu döndür.

22.1.3.11 String.prototype.lastIndexOf ( searchString [ , position ] )

Bu yöntem çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. thisValue, this değeri olsun.

  2. ? RequireObjectCoercible(thisValue) işlemini gerçekleştir.

  3. string, ? ToString(thisValue) olsun.

  4. searchString değerini ? ToString(searchString) olarak ayarla.

  5. numberPosition, ? ToNumber(position) olsun.

  6. İddia et (Assert): Eğer position undefined ise, o halde numberPosition NaN'dır.

  7. Eğer numberPosition NaN ise, position değerini +∞ olarak ayarla; aksi takdirde position değerini ! ToIntegerOrInfinity(numberPosition) olarak ayarla.

  8. length, string dizgisinin uzunluğu olsun.

  9. searchLength, searchString dizgisinin uzunluğu olsun.

  10. Eğer length < searchLength ise, -1𝔽 döndür.

  11. start, position değerinin 0 ile length - searchLength arasında sınırlandırılması (clamping) sonucu olsun.

  12. result, StringLastIndexOf(string, searchString, start) olsun.

  13. Eğer result not-found ise, -1𝔽 döndür.

  14. 𝔽(result) döndür.

22.1.3.12 String.prototype.localeCompare ( that [ , reserved1 [ , reserved2 ] ] )

ECMA-402 Uluslararasılaştırma API'sini içeren bir ECMAScript uygulaması, bu yöntemi ECMA-402 belirtiminde açıklandığı şekilde uygulamalıdır. Bir ECMAScript uygulaması ECMA-402 API'sini içermiyorsa, bu yöntemin aşağıdaki belirtimi kullanılır:

Bu yöntem, this değerinin (bir string String değerine dönüştürülmüş) that (bir thatValue String değerine dönüştürülmüş) ile uygulama tarafından tanımlanan (implementation-defined) yerel ayarlara duyarlı (locale-sensitive) bir String karşılaştırmasının sonucunu temsil eden NaN dışındaki bir Sayıyı döndürür. Sonucun, barındırıcı ortamın (host environment) geçerli yerel ayarının (locale) kurallarına göre String değerlerinin bir sıralama düzenine (sort order) uygun olması amaçlanır; string, thatValue değerinden önce sıralandığında negatif, string, thatValue değerinden sonra sıralandığında pozitif ve diğer tüm durumlarda sıfır olur (bu durum, string ve thatValue arasında göreceli bir sıralama olmadığını gösterir).

Karşılaştırmaları yapmadan önce, bu yöntem String'leri hazırlamak için aşağıdaki adımları gerçekleştirir:

  1. thisValue, this değeri olsun.

  2. ? RequireObjectCoercible(thisValue) işlemini gerçekleştir.

  3. string, ? ToString(thisValue) olsun.

  4. thatValue, ? ToString(that) olsun.

Bu yöntemin isteğe bağlı ikinci ve üçüncü parametrelerinin anlamı ECMA-402 belirtiminde tanımlanmıştır; ECMA-402 desteği içermeyen uygulamalar bu parametre konumlarına başka hiçbir yorum atamamalıdır.

Gerçek dönüş değerleri, içlerine ek bilgi kodlanmasına izin vermek için uygulama tarafından tanımlanır (implementation-defined), ancak iki argümanlı bir yöntem olarak değerlendirildiğinde bu yöntemin, tüm String'ler kümesi üzerinde tam bir sıralama tanımlayan tutarlı bir karşılaştırıcı (consistent comparator) olması gerekir. Bu yöntem ayrıca, ayırt edilebilir ancak kanonik olarak eşdeğer olan String'leri karşılaştırırken +0𝔽 döndürmek de dahil olmak üzere, Unicode Standardına göre kanonik eşdeğerliği tanımalı ve buna uymalıdır.

22.1.3.13 String.prototype.match ( regexpOrPattern )

Bu yöntem çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. thisValue, this değeri olsun.

  2. ? RequireObjectCoercible(thisValue) işlemini gerçekleştir.

  3. Eğer regexpOrPattern bir Nesne ise (is an Object), o halde

    1. matcher, ? GetMethod(regexpOrPattern, %Symbol.match%) olsun.

    2. Eğer matcher undefined değilse, o halde

      1. Return ? Call(matcher, regexpOrPattern, « thisValue »).
  4. string, ? ToString(thisValue) olsun.

  5. regexp, ? RegExpCreate(regexpOrPattern, undefined) olsun.

  6. ? Invoke(regexp, %Symbol.match%, « string ») döndür.

22.1.3.14 String.prototype.matchAll ( regexpOrPattern )

Bu yöntem, this değerini temsil eden String ile regexpOrPattern arasında düzenli ifade (regular expression) eşleştirmesi gerçekleştirir ve eşleşme sonuçlarını üreten bir yineleyici (iterator) döndürür. Her eşleşme sonucu, ilk öğesi String'in eşleşen kısmını içeren, ardından yakalama grupları (capturing groups) tarafından eşleştirilen kısımları içeren bir Dizi'dir (Array). Eğer düzenli ifade hiçbir zaman eşleşmezse, döndürülen yineleyici (iterator) herhangi bir eşleşme sonucu üretmez.

Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. thisValue, this değeri olsun.

  2. ? RequireObjectCoercible(thisValue) işlemini gerçekleştir.

  3. Eğer regexpOrPattern bir Nesne ise (is an Object), o halde

    1. isRegexp, ? IsRegExp(regexpOrPattern) olsun.

    2. Eğer isRegexp true ise, o halde

      1. flags, ? Get(regexpOrPattern, "flags") olsun.

      2. ? RequireObjectCoercible(flags) işlemini gerçekleştir.

      3. Eğer ? ToString(flags) ifadesi "g" içermiyorsa, bir TypeError istisnası fırlat.

    3. matcher, ? GetMethod(regexpOrPattern, %Symbol.matchAll%) olsun.

    4. Eğer matcher undefined değilse, o halde

      1. ? Call(matcher, regexpOrPattern, « thisValue ») döndür.
  4. string, ? ToString(thisValue) olsun.

  5. regexp, ? RegExpCreate(regexpOrPattern, "g") olsun.

  6. ? Invoke(regexp, %Symbol.matchAll%, « string ») döndür.

22.1.3.15 String.prototype.normalize ( [ form ] )

Bu yöntem çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. thisValue, this değeri olsun.

  2. ? RequireObjectCoercible(thisValue) işlemini gerçekleştir.

  3. string, ? ToString(thisValue) olsun.

  4. Eğer form undefined ise, form değerini "NFC" olarak ayarla.

  5. Aksi takdirde, form değerini ? ToString(form) olarak ayarla.

  6. Eğer form; "NFC", "NFD", "NFKC" veya "NFKD" değerlerinden biri değilse, bir RangeError istisnası fırlat.

  7. normal, string değerinin, en son Unicode Standardı, Normalleştirme Formları (the latest Unicode Standard, Normalization Forms) belgesinde belirtildiği üzere form ile adlandırılan normalleştirme formuna normalleştirilmesinin sonucu olan String değeri olsun.

  8. normal döndür.

22.1.3.16 String.prototype.padEnd ( maxLength [ , fillString ] )

Bu yöntem çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. thisValue, this değeri olsun.

  2. ? RequireObjectCoercible(thisValue) işlemini gerçekleştir.

  3. ? StringPaddingBuiltinsImpl(thisValue, maxLength, fillString, end) sonucunu döndür.

22.1.3.17 String.prototype.padStart ( maxLength [ , fillString ] )

Bu yöntem çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. thisValue, this değeri olsun.

  2. ? RequireObjectCoercible(thisValue) işlemini gerçekleştir.

  3. ? StringPaddingBuiltinsImpl(thisValue, maxLength, fillString, start) sonucunu döndür.

22.1.3.17.1 StringPaddingBuiltinsImpl ( thisValue, maxLength, fillString, placement )

Soyut işlem StringPaddingBuiltinsImpl; thisValue (bir ECMAScript dil değeri (ECMAScript language value)), maxLength (bir ECMAScript dil değeri (ECMAScript language value)), fillString (bir ECMAScript dil değeri (ECMAScript language value)) ve placement (start veya end) argümanlarını alır ve bir String içeren bir normal tamamlanma (normal completion containing) ya da bir fırlatma tamamlanması (throw completion) döndürür. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. string, ? ToString(thisValue) olsun.

  2. intMaxLength, (? ToLength(maxLength)) olsun.

  3. stringLength, string dizgisinin uzunluğu olsun.

  4. Eğer intMaxLengthstringLength ise, string döndür.

  5. Eğer fillString undefined ise, fillString değerini yalnızca 0x0020 kod biriminden (SPACE) oluşan String değeri olarak ayarla.

  6. Aksi takdirde, fillString değerini ? ToString(fillString) olarak ayarla.

  7. StringPad(string, intMaxLength, fillString, placement) sonucunu döndür.

22.1.3.17.2 StringPad ( string, maxLength, fillString, placement )

Soyut işlem StringPad; string (bir Dizgi), maxLength (negatif olmayan bir tam sayı (integer)), fillString (bir Dizgi) ve placement (start veya end) argümanlarını alır ve bir Dizgi döndürür. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. stringLength, string dizgisinin uzunluğu olsun.

  2. Eğer maxLengthstringLength ise, string döndür.

  3. Eğer fillString boş Dizgi ise, string döndür.

  4. fillLength, maxLength - stringLength olsun.

  5. truncatedStringFiller, fillString dizgisinin tekrarlanan birleşimlerinin fillLength uzunluğuna kesilmesiyle elde edilen String değeri olsun.

  6. Eğer placement start ise, truncatedStringFiller ile string değerlerinin dizgi birleşimini (string-concatenation) döndür.

  7. string ile truncatedStringFiller değerlerinin dizgi birleşimini (string-concatenation) döndür.

22.1.3.17.3 ToZeroPaddedDecimalString ( n, minLength )

Soyut işlem ToZeroPaddedDecimalString; n (negatif olmayan bir tam sayı (integer)) ve minLength (negatif olmayan bir tam sayı (integer)) argümanlarını alır ve bir Dizgi döndürür. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. string, n değerinin ondalık sayı olarak biçimlendirilmiş Dizgi (String) temsili olsun.

  2. StringPad(string, minLength, "0", start) sonucunu döndür.

22.1.3.18 String.prototype.repeat ( count )

Bu yöntem çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. thisValue, this değeri olsun.

  2. ? RequireObjectCoercible(thisValue) işlemini gerçekleştir.

  3. string, ? ToString(thisValue) olsun.

  4. n, ? ToIntegerOrInfinity(count) olsun.

  5. Eğer n < 0 veya n = +∞ ise, bir RangeError istisnası fırlat.

  6. Eğer n = 0 ise, boş Dizgi döndür.

  7. string dizgisinin n adet kopyasının birbirine eklenmesiyle elde edilen String değerini döndür.

22.1.3.19 String.prototype.replace ( searchValue, replaceValue )

Bu yöntem çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. thisValue, this değeri olsun.

  2. ? RequireObjectCoercible(thisValue) işlemini gerçekleştir.

  3. Eğer searchValue bir Nesne ise (is an Object), o halde

    1. replacer, ? GetMethod(searchValue, %Symbol.replace%) olsun.

    2. Eğer replacer undefined değilse, o halde

      1. ? Call(replacer, searchValue, « thisValue, replaceValue ») döndür.
  4. string, ? ToString(thisValue) olsun.

  5. searchString, ? ToString(searchValue) olsun.

  6. functionalReplace, IsCallable(replaceValue) olsun.

  7. Eğer functionalReplace false ise, o halde

    1. replaceValue değerini ? ToString(replaceValue) olarak ayarla.
  8. searchLength, searchString dizgisinin uzunluğu olsun.

  9. position, StringIndexOf(string, searchString, 0) olsun.

  10. Eğer position not-found ise, string döndür.

  11. preceding, string dizgisinin 0'dan position konumuna kadar olan alt dizgisi (substring) olsun.

  12. following, string dizgisinin position + searchLength konumundan itibaren olan alt dizgisi (substring) olsun.

  13. Eğer functionalReplace true ise, o halde

    1. replacement, ? ToString(? Call(replaceValue, undefined, « searchString, 𝔽(position), string »)) olsun.
  14. Değilse,

    1. İddia et (Assert): replaceValue bir Dizgidir (is a String).

    2. captures, yeni ve boş bir Liste (List) olsun.

    3. replacement, ! GetSubstitution(searchString, string, position, captures, undefined, replaceValue) olsun.

  15. preceding, replacement ve following değerlerinin dizgi birleşimini (string-concatenation) döndür.

22.1.3.19.1 GetSubstitution ( matched, string, position, captures, namedCaptures, replacementTemplate )

Soyut işlem GetSubstitution; matched (bir Dizgi), string (bir Dizgi), position (negatif olmayan bir tam sayı (integer)), captures (Dizgilerden veya undefined değerlerinden oluşan bir Liste (List)), namedCaptures (bir Nesne veya undefined) ve replacementTemplate (bir Dizgi) argümanlarını alır ve bir String içeren bir normal tamamlanma (normal completion containing) ya da bir fırlatma tamamlanması (throw completion) döndürür. Bu soyut işlemin amaçları doğrultusunda, ondalık basamak (decimal digit), 0x0030 (DIGIT ZERO) ile 0x0039 (DIGIT NINE) arasındaki kapalı aralıkta (inclusive interval) yer alan bir kod birimidir. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. stringLength, string dizgisinin uzunluğu olsun.

  2. İddia et (Assert): positionstringLength.

  3. result, boş Dizgi olsun.

  4. templateRemainder, replacementTemplate olsun.

  5. templateRemainder boş Dizgi olmadığı sürece tekrarla:

    1. NOT: Aşağıdaki adımlar ref'i (templateRemainder'ın bir önekini) izole eder, refReplacement (onun yerine konacak değeri) belirler ve ardından bu yerine konacak değeri result'a ekler.

    2. Eğer templateRemainder "$$" ile başlıyorsa, o halde

      1. ref, "$$" olsun.

      2. refReplacement, "$" olsun.

    3. Değilse, eğer templateRemainder "$"` ile başlıyorsa, o halde

      1. ref, "$"` olsun.

      2. refReplacement, string dizgisinin 0'dan position konumuna kadar olan alt dizgisi (substring) olsun.

    4. Değilse, eğer templateRemainder "$&" ile başlıyorsa, o halde

      1. ref, "$&" olsun.

      2. refReplacement, matched olsun.

    5. Değilse, eğer templateRemainder "$'" (0x0027 (APOSTROPHE) ile takip edilen 0x0024 (DOLLAR SIGN)) ile başlıyorsa, o halde

      1. ref, "$'" olsun.

      2. matchLength, matched dizgisinin uzunluğu olsun.

      3. tailPosition, position + matchLength olsun.

      4. refReplacement, string dizgisinin min(tailPosition, stringLength) konumundan itibaren olan alt dizgisi (substring) olsun.

      5. NOT: tailPosition ancak bu soyut işlem, "exec" özelliği yerleşik %RegExp.prototype.exec% olmayan bir nesne üzerindeki %RegExp.prototype% nesnesinin yerleşik %Symbol.replace% yöntemine yapılan bir çağrı tarafından yürütüldüyse stringLength değerini aşabilir.

    6. Değilse, eğer templateRemainder "$" ve ardından gelen 1 veya daha fazla ondalık basamak ile başlıyorsa, o halde

      1. Eğer templateRemainder "$" ve ardından gelen 2 veya daha fazla ondalık basamak ile başlıyorsa, digitCount 2 olsun; aksi takdirde digitCount 1 olsun.

      2. digits, templateRemainder dizgisinin 1'den 1 + digitCount konumuna kadar olan alt dizgisi (substring) olsun.

      3. index, (StringToNumber(digits)) olsun.

      4. İddia et (Assert): 0 ≤ index ≤ 99.

      5. captureLength, captures içindeki öğelerin sayısı olsun.

      6. Eğer index > captureLength ve digitCount = 2 ise, o halde

         1. [NOT](06_sec-notational-conventions.md#note-step): İki basamaklı bir değiştirme şablonu, yakalama gruplarının sayısını aşan bir dizin belirttiğinde, bir basamaklı bir değiştirme şablonu ve ardından gelen bir düz basamak olarak değerlendirilir.
        
         2. *digitCount* değerini 1 olarak ayarla.
        
         3. *digits* değerini, *digits* dizgisinin 0'dan 1'e kadar olan [alt dizgisi (substring)](07_sec-ecmascript-data-types-and-values.md#substring) olarak ayarla.
        
         4. *index* değerini [ℝ](06_sec-notational-conventions.md#ℝ)([StringToNumber](08_sec-abstract-operations.md#sec-stringtonumber)(*digits*)) olarak ayarla.
      7. ref, templateRemainder dizgisinin 0'dan 1 + digitCount konumuna kadar olan alt dizgisi (substring) olsun.

      8. Eğer 1 ≤ indexcaptureLength ise, o halde

         1. *capture*, *captures*[*index* - 1] olsun.
        
         2. Eğer *capture* `undefined` ise, o halde
           
                   1. *refReplacement*, boş Dizgi olsun.
        
         3. Değilse,
           
                   1. *refReplacement*, *capture* olsun.
      9. Değilse,

         1. *refReplacement*, *ref* olsun.
    7. Değilse, eğer templateRemainder "$<" ile başlıyorsa, o halde

      1. gtPosition, StringIndexOf(templateRemainder, ">", 0) olsun.

      2. Eğer gtPosition not-found ise veya namedCaptures undefined ise, o halde

         1. *ref*, `"$<"` olsun.
        
         2. *refReplacement*, *ref* olsun.
      3. Değilse,

         1. *ref*, *templateRemainder* dizgisinin 0'dan *gtPosition* + 1 konumuna kadar olan [alt dizgisi (substring)](07_sec-ecmascript-data-types-and-values.md#substring) olsun.
        
         2. *groupName*, *templateRemainder* dizgisinin 2'den *gtPosition* konumuna kadar olan [alt dizgisi (substring)](07_sec-ecmascript-data-types-and-values.md#substring) olsun.
        
         3. [İddia et (Assert)](06_sec-notational-conventions.md#assert): *namedCaptures* [bir Nesnedir (is an Object)](07_sec-ecmascript-data-types-and-values.md#sec-object-type).
        
         4. *capture*, ? [Get](08_sec-abstract-operations.md#sec-get-o-p)(*namedCaptures*, *groupName*) olsun.
        
         5. Eğer *capture* `undefined` ise, o halde
           
                   1. *refReplacement*, boş Dizgi olsun.
        
         6. Değilse,
           
                   1. *refReplacement*, ? [ToString](08_sec-abstract-operations.md#sec-tostring)(*capture*) olsun.
    8. Değilse,

      1. ref, templateRemainder dizgisinin 0'dan 1 konumuna kadar olan alt dizgisi (substring) olsun.

      2. refReplacement, ref olsun.

    9. refLength, ref dizgisinin uzunluğu olsun.

    10. templateRemainder değerini, templateRemainder dizgisinin refLength konumundan itibaren olan alt dizgisi (substring) olarak ayarla.

    11. result değerini, result ile refReplacement değerlerinin dizgi birleşimi (string-concatenation) olarak ayarla.

  6. result döndür.

22.1.3.20 String.prototype.replaceAll ( searchValue, replaceValue )

Bu yöntem çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. thisValue, this değeri olsun.

  2. ? RequireObjectCoercible(thisValue) işlemini gerçekleştir.

  3. Eğer searchValue bir Nesne ise (is an Object), o halde

    1. isRegexp, ? IsRegExp(searchValue) olsun.

    2. Eğer isRegexp true ise, o halde

      1. flags, ? Get(searchValue, "flags") olsun.

      2. ? RequireObjectCoercible(flags) işlemini gerçekleştir.

      3. Eğer ? ToString(flags) ifadesi "g" içermiyorsa, bir TypeError istisnası fırlat.

    3. replacer, ? GetMethod(searchValue, %Symbol.replace%) olsun.

    4. Eğer replacer undefined değilse, o halde

      1. ? Call(replacer, searchValue, « thisValue, replaceValue ») döndür.
  4. string, ? ToString(thisValue) olsun.

  5. searchString, ? ToString(searchValue) olsun.

  6. functionalReplace, IsCallable(replaceValue) olsun.

  7. Eğer functionalReplace false ise, o halde

    1. replaceValue değerini ? ToString(replaceValue) olarak ayarla.
  8. searchLength, searchString dizgisinin uzunluğu olsun.

  9. advanceBy, max(1, searchLength) olsun.

  10. matchPositions, yeni ve boş bir Liste (List) olsun.

  11. position, StringIndexOf(string, searchString, 0) olsun.

  12. position not-found olmadığı sürece tekrarla:

    1. position değerini matchPositions listesine ekle.

    2. position değerini StringIndexOf(string, searchString, position + advanceBy) olarak ayarla.

  13. endOfLastMatch, 0 olsun.

  14. result, boş Dizgi olsun.

  15. matchPositions listesinin her bir matchPosition öğesi için sırasıyla şunları yap:

    1. preserved, string dizgisinin endOfLastMatch konumundan matchPosition konumuna kadar olan alt dizgisi (substring) olsun.

    2. Eğer functionalReplace true ise, o halde

      1. replacement, ? ToString(? Call(replaceValue, undefined, « searchString, 𝔽(matchPosition), string »)) olsun.
    3. Değilse,

      1. İddia et (Assert): replaceValue bir Dizgidir (is a String).

      2. captures, yeni ve boş bir Liste (List) olsun.

      3. replacement, ! GetSubstitution(searchString, string, matchPosition, captures, undefined, replaceValue) olsun.

    4. result değerini, result, preserved ve replacement değerlerinin dizgi birleşimi (string-concatenation) olarak ayarla.

    5. endOfLastMatch değerini matchPosition + searchLength olarak ayarla.

  16. Eğer endOfLastMatch < string dizgisinin uzunluğu ise, o halde

    1. result değerini, result ile string dizgisinin endOfLastMatch konumundan itibaren olan alt dizgisinin (substring) dizgi birleşimi (string-concatenation) olarak ayarla.
  17. result döndür.

Bu yöntem çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. thisValue, this değeri olsun.

  2. ? RequireObjectCoercible(thisValue) işlemini gerçekleştir.

  3. Eğer regexpOrPattern bir Nesne ise (is an Object), o halde

    1. searcher, ? GetMethod(regexpOrPattern, %Symbol.search%) olsun.

    2. Eğer searcher undefined değilse, o halde

      1. ? Call(searcher, regexpOrPattern, « thisValue ») döndür.
  4. string, ? ToString(thisValue) olsun.

  5. regexp, ? RegExpCreate(regexpOrPattern, undefined) olsun.

  6. ? Invoke(regexp, %Symbol.search%, « string ») döndür.

22.1.3.22 String.prototype.slice ( start, end )

Bu yöntem, bu nesneyi bir String'e dönüştürmekten elde edilen sonucun start dizininden başlayıp end dizinine kadar olan (dahil değil) (veya *end undefined` ise String'in sonuna kadar olan) alt dizgisini döndürür. Eğer start negatifse, sourceLength dizginin uzunluğu olmak üzere sourceLength + start olarak işlem görür. Eğer end negatifse, sourceLength dizginin uzunluğu olmak üzere sourceLength + end olarak işlem görür. Sonuç bir String nesnesi değil, bir String (is a String) değeridir.

Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. thisValue, this değeri olsun.

  2. ? RequireObjectCoercible(thisValue) işlemini gerçekleştir.

  3. string, ? ToString(thisValue) olsun.

  4. length, string dizgisinin uzunluğu olsun.

  5. intStart, ? ToIntegerOrInfinity(start) olsun.

  6. Eğer intStart = -∞ ise, from, 0 olsun.

  7. Değilse, eğer intStart < 0 ise, from, max(length + intStart, 0) olsun.

  8. Değilse, from, min(intStart, length) olsun.

  9. Eğer end undefined ise, intEnd, length olsun; aksi takdirde intEnd, ? ToIntegerOrInfinity(end) olsun.

  10. Eğer intEnd = -∞ ise, to, 0 olsun.

  11. Değilse, eğer intEnd < 0 ise, to, max(length + intEnd, 0) olsun.

  12. Değilse, to, min(intEnd, length) olsun.

  13. Eğer fromto ise, boş Dizgi döndür.

  14. string dizgisinin from konumundan to konumuna kadar olan alt dizgisini (substring) döndür.

22.1.3.23 String.prototype.split ( separator, limit )

Bu yöntem, bu nesneyi bir String'e dönüştürmekten elde edilen sonucun alt dizgilerinin depolandığı bir Dizi (Array) döndürür. Alt dizgiler, soldan sağa doğru separator araması yapılarak belirlenir; bu eşleşmeler döndürülen dizideki hiçbir String'in parçası değildir, ancak String değerini bölmeye hizmet eder. separator değeri herhangi bir uzunlukta bir String olabilir or %Symbol.split% yöntemine sahip bir RegExp gibi bir nesne olabilir.

Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. thisValue, this değeri olsun.

  2. ? RequireObjectCoercible(thisValue) işlemini gerçekleştir.

  3. Eğer separator bir Nesne ise (is an Object), o halde

    1. splitter, ? GetMethod(separator, %Symbol.split%) olsun.

    2. Eğer splitter undefined değilse, o halde

      1. ? Call(splitter, separator, « thisValue, limit ») döndür.
  4. string, ? ToString(thisValue) olsun.

  5. Eğer limit undefined ise, lim, 232 - 1 olsun; aksi takdirde lim, (? ToUint32(limit)) olsun.

  6. separatorString, ? ToString(separator) olsun.

  7. Eğer lim = 0 ise, o halde

    1. CreateArrayFromList(« ») sonucunu döndür.
  8. Eğer separator undefined ise, o halde

    1. CreateArrayFromListstring ») sonucunu döndür.
  9. separatorLength, separatorString dizgisinin uzunluğu olsun.

  10. Eğer separatorLength = 0 ise, o halde

    1. stringLength, string dizgisinin uzunluğu olsun.

    2. outLength, lim değerinin 0 ile stringLength arasında sınırlandırılması (clamping) sonucu olsun.

    3. head, string dizgisinin 0'dan outLength konumuna kadar olan alt dizgisini (substring) olsun.

    4. codeUnits, head'in öğeleri olan kod birimleri sırasından oluşan bir Liste (List) olsun.

    5. CreateArrayFromList(codeUnits) sonucunu döndür.

  11. Eğer string boş Dizgi ise, CreateArrayFromListstring ») sonucunu döndür.

  12. substrings, yeni ve boş bir Liste (List) olsun.

  13. searchStart, 0 olsun.

  14. matchIndex, StringIndexOf(string, separatorString, 0) olsun.

  15. matchIndex not-found olmadığı sürece tekrarla:

    1. substring, string dizgisinin searchStart konumundan matchIndex konumuna kadar olan alt dizgisini (substring) olsun.

    2. substring değerini substrings listesine ekle.

    3. Eğer substrings içindeki öğelerin sayısı lim ise, CreateArrayFromList(substrings) sonucunu döndür.

    4. searchStart değerini matchIndex + separatorLength olarak ayarla.

    5. matchIndex değerini StringIndexOf(string, separatorString, searchStart) olarak ayarla.

  16. substring, string dizgisinin searchStart konumundan itibaren olan alt dizgisini (substring) olsun.

  17. substring değerini substrings listesine ekle.

  18. CreateArrayFromList(substrings) sonucunu döndür.

22.1.3.24 String.prototype.startsWith ( searchString [ , position ] )

Bu yöntem çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. thisValue, this değeri olsun.

  2. ? RequireObjectCoercible(thisValue) işlemini gerçekleştir.

  3. string, ? ToString(thisValue) olsun.

  4. isRegexp, ? IsRegExp(searchString) olsun.

  5. Eğer isRegexp true ise, bir TypeError istisnası fırlat.

  6. searchString değerini ? ToString(searchString) olarak ayarla.

  7. length, string dizgisinin uzunluğu olsun.

  8. Eğer position undefined ise, position değerini 0 olarak ayarla; aksi takdirde position değerini ? ToIntegerOrInfinity(position) olarak ayarla.

  9. start, position değerinin 0 ile length arasında sınırlandırılması (clamping) sonucu olsun.

  10. searchLength, searchString dizgisinin uzunluğu olsun.

  11. Eğer searchLength = 0 ise, true döndür.

  12. end, start + searchLength olsun.

  13. Eğer end > length ise, false döndür.

  14. substring, string dizgisinin start konumundan end konumuna kadar olan alt dizgisi (substring) olsun.

  15. Eğer substring, searchString ile aynı ise, true döndür.

  16. false döndür.

22.1.3.25 String.prototype.substring ( start, end )

Bu yöntem, bu nesneyi bir String'e dönüştürmekten elde edilen sonucun start dizininden başlayıp end dizinine kadar olan (dahil değil) (veya end undefined ise String'in sonuna kadar olan) alt dizgisini döndürür. Sonuç bir String nesnesi değil, bir String (is a String) değeridir.

Eğer iki argümandan biri NaN veya negatif ise sıfır ile değiştirilir; eğer iki argümandan biri kesinlikle String'in uzunluğundan büyükse String'in uzunluğu ile değiştirilir.

Eğer start değeri end değerinden kesinlikle büyükse ikisi yer değiştirilir.

Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. thisValue, this değeri olsun.

  2. ? RequireObjectCoercible(thisValue) işlemini gerçekleştir.

  3. string, ? ToString(thisValue) olsun.

  4. length, string dizgisinin uzunluğu olsun.

  5. intStart, ? ToIntegerOrInfinity(start) olsun.

  6. Eğer end undefined ise, intEnd, length olsun; aksi takdirde intEnd, ? ToIntegerOrInfinity(end) olsun.

  7. finalStart, intStart değerinin 0 ile length arasında sınırlandırılması (clamping) sonucu olsun.

  8. finalEnd, intEnd değerinin 0 ile length arasında sınırlandırılması (clamping) sonucu olsun.

  9. from, min(finalStart, finalEnd) olsun.

  10. to, max(finalStart, finalEnd) olsun.

  11. string dizgisinin from konumundan to konumuna kadar olan alt dizgisini (substring) döndür.

22.1.3.26 String.prototype.toLocaleLowerCase ( [ reserved1 [ , reserved2 ] ] )

ECMA-402 Uluslararasılaştırma API'sini içeren bir ECMAScript uygulaması, bu yöntemi ECMA-402 belirtiminde açıklandığı şekilde uygulamalıdır. Bir ECMAScript uygulaması ECMA-402 API'sini içermiyorsa, bu yöntemin aşağıdaki belirtimi kullanılır:

Bu yöntem, bir String değerini 6.1.4 içinde açıklandığı gibi UTF-16 kodlu kod noktaları dizisi olarak yorumlar.

Bu dil için kuralların normal Unicode büyük/küçük harf eşlemeleriyle çeliştiği birkaç durum (örneğin Türkçe) dışında, barındırıcı ortamın (host environment) geçerli yerel ayarının (locale) kurallarına uygun, yerel ayarlara duyarlı bir sonuç üretmesinin amaçlanması hariç toLowerCase ile tamamen aynı şekilde çalışır.

Bu yöntemin isteğe bağlı parametrelerinin anlamı ECMA-402 belirtiminde tanımlanmıştır; ECMA-402 desteği içermeyen uygulamalar bu parametre konumlarını başka hiçbir şey için kullanmamalıdır.

22.1.3.27 String.prototype.toLocaleUpperCase ( [ reserved1 [ , reserved2 ] ] )

ECMA-402 Uluslararasılaştırma API'sini içeren bir ECMAScript uygulaması, bu yöntemi ECMA-402 belirtiminde açıklandığı şekilde uygulamalıdır. Bir ECMAScript uygulaması ECMA-402 API'sini içermiyorsa, bu yöntemin aşağıdaki belirtimi kullanılır:

Bu yöntem, bir String değerini 6.1.4 içinde açıklandığı gibi UTF-16 kodlu kod noktaları dizisi olarak yorumlar.

Bu dil için kuralların normal Unicode büyük/küçük harf eşlemeleriyle çeliştiği birkaç durum (örneğin Türkçe) dışında, barındırıcı ortamın (host environment) geçerli yerel ayarının (locale) kurallarına uygun, yerel ayarlara duyarlı bir sonuç üretmesinin amaçlanması hariç toUpperCase ile tamamen aynı şekilde çalışır.

Bu yöntemin isteğe bağlı parametrelerinin anlamı ECMA-402 belirtiminde tanımlanmıştır; ECMA-402 desteği içermeyen uygulamalar bu parametre konumlarını başka hiçbir şey için kullanmamalıdır.

22.1.3.28 String.prototype.toLowerCase ( )

Bu yöntem, bir String değerini 6.1.4 içinde açıklandığı gibi UTF-16 kodlu kod noktaları dizisi olarak yorumlar.

Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. thisValue, this değeri olsun.

  2. ? RequireObjectCoercible(thisValue) işlemini gerçekleştir.

  3. string, ? ToString(thisValue) olsun.

  4. sText, StringToCodePoints(string) olsun.

  5. lowerText, Unicode Varsayılan Büyük/Küçük Harf Dönüşüm (Unicode Default Case Conversion) algoritmasına göre toLowercase(sText) olsun.

  6. lowercaseString, CodePointsToString(lowerText) olsun.

  7. lowercaseString döndür.

Sonuç, Unicode Karakter Veritabanındaki (Unicode Character Database) yerel ayarlardan bağımsız büyük/küçük harf eşlemelerine göre elde edilmelidir (bu, açıkça sadece UnicodeData.txt dosyasını değil, aynı zamanda ona eşlik eden SpecialCasing.txt dosyasındaki yerel ayarlardan bağımsız tüm eşlemeleri de içerir).

22.1.3.29 String.prototype.toString ( )

Bu yöntem çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. ? ThisStringValue(this değeri) sonucunu döndür.

22.1.3.30 String.prototype.toUpperCase ( )

Bu yöntem, bir String değerini 6.1.4 içinde açıklandığı gibi UTF-16 kodlu kod noktaları dizisi olarak yorumlar.

String'in, Unicode Varsayılan Büyük/Küçük Harf Dönüşümünün (Unicode Default Case Conversion) toUppercase algoritması kullanılarak eşlenmesi hariç, String.prototype.toLowerCase ile tamamen aynı şekilde davranır.

22.1.3.31 String.prototype.toWellFormed ( )

Bu yöntem, bir surrogate çiftinin (surrogate pair) parçası olmayan tüm üst surrogate'lerin (leading surrogates) ve alt surrogate'lerin (trailing surrogates) U+FFFD (REPLACEMENT CHARACTER) ile değiştirildiği bu nesnenin bir String temsilini döndürür.

Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. thisValue, this değeri olsun.

  2. ? RequireObjectCoercible(thisValue) işlemini gerçekleştir.

  3. string, ? ToString(thisValue) olsun.

  4. stringLength, string dizgisinin uzunluğu olsun.

  5. k, 0 olsun.

  6. result, boş Dizgi olsun.

  7. k < stringLength olduğu sürece tekrarla:

    1. codePoint, CodePointAt(string, k) olsun.

    2. Eğer codePoint.[[IsUnpairedSurrogate]] true ise, o halde

      1. result değerini, result ile 0xFFFD (REPLACEMENT CHARACTER) değerlerinin dizgi birleşimi (string-concatenation) olarak ayarla.
    3. Değilse,

      1. result değerini, result ile UTF16EncodeCodePoint(codePoint.[[CodePoint]]) değerlerinin dizgi birleşimi (string-concatenation) olarak ayarla.
    4. k değerini k + codePoint.[[CodeUnitCount]] olarak ayarla.

  8. result döndür.

22.1.3.32 String.prototype.trim ( )

Bu yöntem, bir String değerini 6.1.4 içinde açıklandığı gibi UTF-16 kodlu kod noktaları dizisi olarak yorumlar.

Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. thisValue, this değeri olsun.

  2. ? TrimString(thisValue, start+end) sonucunu döndür.

22.1.3.32.1 TrimString ( arg, where )

Soyut işlem TrimString; arg (bir ECMAScript dil değeri (ECMAScript language value)) ve where (start, end veya start+end) argümanlarını alır ve bir String içeren bir normal tamamlanma (normal completion containing) ya da bir fırlatma tamamlanması (throw completion) döndürür. arg argümanını 6.1.4 içinde açıklandığı gibi UTF-16 kodlu kod noktaları dizisi olarak yorumlar. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. ? RequireObjectCoercible(arg) işlemini gerçekleştir.

  2. string, ? ToString(arg) olsun.

  3. Eğer where start ise, o halde

    1. trimmedString, başındaki boşluk karakterleri (leading white space) kaldırılmış bir string kopyası olan String değeri olsun.
  4. Else if where is end, then

    1. trimmedString, sonundaki boşluk karakterleri (trailing white space) kaldırılmış bir string kopyası olan String değeri olsun.
  5. Değilse,

    1. İddia et (Assert): where değeri start+end olsun.

    2. trimmedString, hem başındaki hem de sonundaki boşluk karakterleri (both leading and trailing white space) kaldırılmış bir string kopyası olan String değeri olsun.

  6. trimmedString döndür.

Boşluk karakteri (white space) tanımı, WhiteSpace ile LineTerminator kümelerinin birleşimidir. Bir Unicode kod noktasının “Space_Separator” (“Zs”) Unicode genel kategorisinde olup olmadığı belirlenirken, kod birimi dizileri 6.1.4 içinde belirtildiği üzere UTF-16 kodlu kod noktası dizileri olarak yorumlanır.

22.1.3.33 String.prototype.trimEnd ( )

Bu yöntem, bir String değerini 6.1.4 içinde açıklandığı gibi UTF-16 kodlu kod noktaları dizisi olarak yorumlar.

Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. string, this değeri olsun.

  2. ? TrimString(string, end) sonucunu döndür.

22.1.3.34 String.prototype.trimStart ( )

Bu yöntem, bir String değerini 6.1.4 içinde açıklandığı gibi UTF-16 kodlu kod noktaları dizisi olarak yorumlar.

Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. string, this değeri olsun.

  2. ? TrimString(string, start) sonucunu döndür.

22.1.3.35 String.prototype.valueOf ( )

Bu yöntem çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. ? ThisStringValue(this değeri) sonucunu döndür.
22.1.3.35.1 ThisStringValue ( arg )

Soyut işlem ThisStringValue; arg (bir ECMAScript dil değeri (ECMAScript language value)) argümanını alır ve bir String içeren bir normal tamamlanma (normal completion containing) ya da bir fırlatma tamamlanması (throw completion) döndürür. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. Eğer arg bir Dizgi ise (is a String), arg döndür.

  2. Eğer arg bir Nesne ise (is an Object) ve arg bir [[StringData]] dahili yuvasına (internal slot) sahipse, o halde

    1. string, arg.[[StringData]] olsun.

    2. İddia et (Assert): string bir Dizgidir (is a String).

    3. string döndür.

  3. Bir TypeError istisnası fırlat.

22.1.3.36 String.prototype [ %Symbol.iterator% ] ( )

Bu yöntem, bir String değerinin kod noktaları üzerinde yineleme yapan ve her bir kod noktasını bir String değeri olarak döndüren bir yineleyici nesnesi (iterator object) döndürür.

Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. string, this değeri olsun.

  2. ? RequireObjectCoercible(string) işlemini gerçekleştir.

  3. string değerini ? ToString(string) olarak ayarla.

  4. closure, string değerini yakalayan ve çağrıldığında aşağıdaki adımları gerçekleştiren, parametresiz yeni bir Soyut Kapanış (Abstract Closure) olsun:

    1. length, string dizgisinin uzunluğu olsun.

    2. position, 0 olsun.

    3. position < length olduğu sürece tekrarla:

      1. codePoint, CodePointAt(string, position) olsun.

      2. nextIndex, position + codePoint.[[CodeUnitCount]] olsun.

      3. resultString, string dizgisinin position konumundan nextIndex konumuna kadar olan alt dizgisi (substring) olsun.

      4. position değerini nextIndex olarak ayarla.

      5. ? GeneratorYield(CreateIteratorResultObject(resultString, false)) işlemini gerçekleştir.

    4. NormalCompletion(unused) döndür.

  5. CreateIteratorFromClosure(closure, "%StringIteratorPrototype%", %StringIteratorPrototype%) sonucunu döndür.

Bu yöntemin "name" özelliğinin değeri "[Symbol.iterator]"tır.

22.1.4 String Örneklerinin Özellikleri (Properties of String Instances)

String örnekleri, String egzotik nesneleridir (String exotic objects) ve bu tür nesneler için belirtilen dahili yöntemlere sahiptir. String örnekleri, özellikleri String prototip nesnesinden (String prototype object) miras alır. String örnekleri ayrıca bir [[StringData]] dahili yuvasına (internal slot) sahiptir. [[StringData]] dahili yuvası, bu String nesnesi tarafından temsil edilen String değeridir.

String örnekleri, bir "length" özelliğine ve tam sayı indeksli (integer-indexed) adlara sahip bir dizi numaralandırılabilir (enumerable) özelliğe sahiptir.

22.1.4.1 length

Bu String nesnesi tarafından temsil edilen String değerindeki öğelerin sayısıdır.

Bir String nesnesi başlatıldıktan sonra bu özellik değişmez. { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false } özniteliklerine sahiptir.

22.1.5 String Yineleyici Nesneleri (String Iterator Objects)

Bir String Yineleyici (String Iterator), belirli bir String örnek nesnesi (String instance object) üzerinde belirli bir yinelemeyi temsil eden bir nesnedir. String Yineleyici nesneleri için adlandırılmış bir yapıcı (constructor) yoktur. Bunun yerine, String Yineleyici nesneleri, String örnek nesnelerinin belirli yöntemleri çağrılarak oluşturulur.

22.1.5.1 %StringIteratorPrototype% Nesnesi (The %StringIteratorPrototype% Object)

%StringIteratorPrototype% nesnesi:

22.1.5.1.1 %StringIteratorPrototype%.next ( )
  1. ? GeneratorResume(this değeri, empty, "%StringIteratorPrototype%") sonucunu döndür.
22.1.5.1.2 %StringIteratorPrototype% [ %Symbol.toStringTag% ]

%Symbol.toStringTag% özelliğinin başlangıç değeri "String Iterator" String değeridir.

Bu özellik { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: true } özniteliklerine sahiptir.

22.2 RegExp (Düzenli İfade) Nesneleri (RegExp (Regular Expression) Objects)

Bir RegExp nesnesi, bir düzenli ifade (regular expression) ve ilişkili bayrakları (flags) içerir.

22.2.1 Şablonlar (Patterns)

RegExp yapıcısı (constructor), girdi şablon String'ine aşağıdaki dilbilgisini uygular. Dilbilgisi String'i Pattern şablonunun bir açılımı olarak yorumlayamazsa bir hata oluşur.

Dilbilgisi (Syntax)

Pattern Pattern[UnicodeMode, UnicodeSetsMode, NamedCaptureGroups] :: Disjunction[?UnicodeMode, ?UnicodeSetsMode, ?NamedCaptureGroups]

Disjunction Disjunction[UnicodeMode, UnicodeSetsMode, NamedCaptureGroups] :: Alternative[?UnicodeMode, ?UnicodeSetsMode, ?NamedCaptureGroups] Alternative[?UnicodeMode, ?UnicodeSetsMode, ?NamedCaptureGroups] | Disjunction[?UnicodeMode, ?UnicodeSetsMode, ?NamedCaptureGroups]

Alternative Alternative[UnicodeMode, UnicodeSetsMode, NamedCaptureGroups] :: [empty] Alternative[?UnicodeMode, ?UnicodeSetsMode, ?NamedCaptureGroups] Term[?UnicodeMode, ?UnicodeSetsMode, ?NamedCaptureGroups]

Term Term[UnicodeMode, UnicodeSetsMode, NamedCaptureGroups] :: Assertion[?UnicodeMode, ?UnicodeSetsMode, ?NamedCaptureGroups] Atom[?UnicodeMode, ?UnicodeSetsMode, ?NamedCaptureGroups] Atom[?UnicodeMode, ?UnicodeSetsMode, ?NamedCaptureGroups] Quantifier

Assertion Assertion[UnicodeMode, UnicodeSetsMode, NamedCaptureGroups] :: ^ $ \b \B (?= Disjunction[?UnicodeMode, ?UnicodeSetsMode, ?NamedCaptureGroups] ) (?! Disjunction[?UnicodeMode, ?UnicodeSetsMode, ?NamedCaptureGroups] ) (?<= Disjunction[?UnicodeMode, ?UnicodeSetsMode, ?NamedCaptureGroups] ) (?<! Disjunction[?UnicodeMode, ?UnicodeSetsMode, ?NamedCaptureGroups] )

Quantifier Quantifier :: QuantifierPrefix QuantifierPrefix ?

QuantifierPrefix QuantifierPrefix :: ***** + ? { DecimalDigits[~Sep] } { DecimalDigits[~Sep] ,} { DecimalDigits[~Sep] , DecimalDigits[~Sep] }

Atom Atom[UnicodeMode, UnicodeSetsMode, NamedCaptureGroups] :: PatternCharacter . **** AtomEscape[?UnicodeMode, ?NamedCaptureGroups] CharacterClass[?UnicodeMode, ?UnicodeSetsMode] ( GroupSpecifier[?UnicodeMode]opt Disjunction[?UnicodeMode, ?UnicodeSetsMode, ?NamedCaptureGroups] ) (? RegularExpressionModifiers : Disjunction[?UnicodeMode, ?UnicodeSetsMode, ?NamedCaptureGroups] ) (? RegularExpressionModifiers - RegularExpressionModifiers : Disjunction[?UnicodeMode, ?UnicodeSetsMode, ?NamedCaptureGroups] )

RegularExpressionModifiers RegularExpressionModifiers :: [empty] RegularExpressionModifiers RegularExpressionModifier

RegularExpressionModifier RegularExpressionModifier :: one of i m s

SyntaxCharacter SyntaxCharacter :: one of ^ $ **** . ***** + ? ( ) [ ] { } |

PatternCharacter PatternCharacter :: SourceCharacter but not SyntaxCharacter

AtomEscape AtomEscape[UnicodeMode, NamedCaptureGroups] :: DecimalEscape CharacterClassEscape[?UnicodeMode] CharacterEscape[?UnicodeMode] [+NamedCaptureGroups] k GroupName[?UnicodeMode]

CharacterEscape CharacterEscape[UnicodeMode] :: ControlEscape c AsciiLetter 0 [lookahead ∉ DecimalDigit] HexEscapeSequence RegExpUnicodeEscapeSequence[?UnicodeMode] IdentityEscape[?UnicodeMode]

ControlEscape ControlEscape :: one of f n r t v

GroupSpecifier GroupSpecifier[UnicodeMode] :: ? GroupName[?UnicodeMode]

GroupName GroupName[UnicodeMode] :: <** *RegExpIdentifierName[?UnicodeMode]* **>

RegExpIdentifierName RegExpIdentifierName[UnicodeMode] :: RegExpIdentifierStart[?UnicodeMode] RegExpIdentifierName[?UnicodeMode] RegExpIdentifierPart[?UnicodeMode]

RegExpIdentifierStart RegExpIdentifierStart[UnicodeMode] :: IdentifierStartChar **** RegExpUnicodeEscapeSequence[+UnicodeMode] [~UnicodeMode] UnicodeLeadSurrogate UnicodeTrailSurrogate

RegExpIdentifierPart RegExpIdentifierPart[UnicodeMode] :: IdentifierPartChar **** RegExpUnicodeEscapeSequence[+UnicodeMode] [~UnicodeMode] UnicodeLeadSurrogate UnicodeTrailSurrogate

RegExpUnicodeEscapeSequence RegExpUnicodeEscapeSequence[UnicodeMode] :: [+UnicodeMode] u HexLeadSurrogate \u HexTrailSurrogate [+UnicodeMode] u HexLeadSurrogate [+UnicodeMode] u HexTrailSurrogate [+UnicodeMode] u HexNonSurrogate [~UnicodeMode] u Hex4Digits [+UnicodeMode] u{ CodePoint }

UnicodeLeadSurrogate UnicodeLeadSurrogate :: any Unicode code point in the inclusive interval from U+D800 to U+DBFF

UnicodeTrailSurrogate UnicodeTrailSurrogate :: any Unicode code point in the inclusive interval from U+DC00 to U+DFFF

Each \u HexTrailSurrogate for which the choice of associated u HexLeadSurrogate is ambiguous shall be associated with the nearest possible u HexLeadSurrogate that would otherwise have no corresponding \u HexTrailSurrogate.

HexLeadSurrogate HexLeadSurrogate :: Hex4Digits but only if the MV of Hex4Digits is in the inclusive interval from 0xD800 to 0xDBFF

HexTrailSurrogate HexTrailSurrogate :: Hex4Digits but only if the MV of Hex4Digits is in the inclusive interval from 0xDC00 to 0xDFFF

HexNonSurrogate HexNonSurrogate :: Hex4Digits but only if the MV of Hex4Digits is not in the inclusive interval from 0xD800 to 0xDFFF

IdentityEscape IdentityEscape[UnicodeMode] :: [+UnicodeMode] SyntaxCharacter [+UnicodeMode] / [~UnicodeMode] SourceCharacter but not UnicodeIDContinue

DecimalEscape DecimalEscape :: NonZeroDigit DecimalDigits[~Sep]opt [lookahead ∉ DecimalDigit]

CharacterClassEscape CharacterClassEscape[UnicodeMode] :: d D s S w W [+UnicodeMode] p{ UnicodePropertyValueExpression } [+UnicodeMode] P{ UnicodePropertyValueExpression }

UnicodePropertyValueExpression UnicodePropertyValueExpression :: UnicodePropertyName = UnicodePropertyValue LoneUnicodePropertyNameOrValue

UnicodePropertyName UnicodePropertyName :: UnicodePropertyNameCharacters

UnicodePropertyNameCharacters UnicodePropertyNameCharacters :: UnicodePropertyNameCharacter UnicodePropertyNameCharactersopt

UnicodePropertyValue UnicodePropertyValue :: UnicodePropertyValueCharacters

LoneUnicodePropertyNameOrValue LoneUnicodePropertyNameOrValue :: UnicodePropertyValueCharacters

UnicodePropertyValueCharacters UnicodePropertyValueCharacters :: UnicodePropertyValueCharacter UnicodePropertyValueCharactersopt

UnicodePropertyValueCharacter UnicodePropertyValueCharacter :: UnicodePropertyNameCharacter DecimalDigit

UnicodePropertyNameCharacter UnicodePropertyNameCharacter :: AsciiLetter _

CharacterClass CharacterClass[UnicodeMode, UnicodeSetsMode] :: [ [lookahead ≠ ^] ClassContents[?UnicodeMode, ?UnicodeSetsMode] ] [^ ClassContents[?UnicodeMode, ?UnicodeSetsMode] ]

ClassContents ClassContents[UnicodeMode, UnicodeSetsMode] :: [empty] [~UnicodeSetsMode] NonemptyClassRanges[?UnicodeMode] [+UnicodeSetsMode] ClassSetExpression

NonemptyClassRanges NonemptyClassRanges[UnicodeMode] :: ClassAtom[?UnicodeMode] ClassAtom[?UnicodeMode] NonemptyClassRangesNoDash[?UnicodeMode] ClassAtom[?UnicodeMode] - ClassAtom[?UnicodeMode] ClassContents[?UnicodeMode, ~UnicodeSetsMode]

NonemptyClassRangesNoDash NonemptyClassRangesNoDash[UnicodeMode] :: ClassAtom[?UnicodeMode] ClassAtomNoDash[?UnicodeMode] NonemptyClassRangesNoDash[?UnicodeMode] ClassAtomNoDash[?UnicodeMode] - ClassAtom[?UnicodeMode] ClassContents[?UnicodeMode, ~UnicodeSetsMode]

ClassAtom ClassAtom[UnicodeMode] :: - ClassAtomNoDash[?UnicodeMode]

ClassAtomNoDash ClassAtomNoDash[UnicodeMode] :: SourceCharacter but not one of **** or ] or - **** ClassEscape[?UnicodeMode]

ClassEscape ClassEscape[UnicodeMode] :: b [+UnicodeMode] - CharacterClassEscape[?UnicodeMode] CharacterEscape[?UnicodeMode]

ClassSetExpression ClassSetExpression :: ClassUnion ClassIntersection ClassSubtraction

ClassUnion ClassUnion :: ClassSetRange ClassUnionopt ClassSetOperand ClassUnionopt

ClassIntersection ClassIntersection :: ClassSetOperand && [lookahead ≠ &] ClassSetOperand ClassIntersection && [lookahead ≠ &] ClassSetOperand

ClassSubtraction ClassSubtraction :: ClassSetOperand -- ClassSetOperand ClassSubtraction -- ClassSetOperand

ClassSetRange ClassSetRange :: ClassSetCharacter - ClassSetCharacter

ClassSetOperand ClassSetOperand :: NestedClass ClassStringDisjunction ClassSetCharacter

NestedClass NestedClass :: [ [lookahead ≠ ^] ClassContents[+UnicodeMode, +UnicodeSetsMode] ] [^ ClassContents[+UnicodeMode, +UnicodeSetsMode] ] **** CharacterClassEscape[+UnicodeMode]

ClassStringDisjunction ClassStringDisjunction :: \q{ ClassStringDisjunctionContents }

ClassStringDisjunctionContents ClassStringDisjunctionContents :: ClassString ClassString | ClassStringDisjunctionContents

ClassString ClassString :: [empty] NonEmptyClassString

NonEmptyClassString NonEmptyClassString :: ClassSetCharacter NonEmptyClassStringopt

ClassSetCharacter ClassSetCharacter :: [lookahead ∉ ClassSetReservedDoublePunctuator] SourceCharacter but not ClassSetSyntaxCharacter **** CharacterEscape[+UnicodeMode] **** ClassSetReservedPunctuator \b

ClassSetReservedDoublePunctuator ClassSetReservedDoublePunctuator :: one of && !! ## $$ %% ****** ++ ,, .. :: ;; <<** **==** **>> ?? @@ ^^ `` ~~

ClassSetSyntaxCharacter ClassSetSyntaxCharacter :: one of ( ) [ ] { } / - **** |

ClassSetReservedPunctuator ClassSetReservedPunctuator :: one of & - ! # % , : ; <** **=** **> @ ` ~

22.2.1.1 Static Semantics: Early Errors

Pattern Pattern :: Disjunction

QuantifierPrefix QuantifierPrefix :: { DecimalDigits , DecimalDigits }

  • İlk DecimalDigits kuralının MV değeri (sayısal değeri), ikinci DecimalDigits kuralının MV değerinden kesinlikle büyükse, bu bir Sözdizimi Hatasıdır (Syntax Error).

Atom Atom :: (? RegularExpressionModifiers : Disjunction )

Atom Atom :: (? RegularExpressionModifiers - RegularExpressionModifiers : Disjunction )

AtomEscape AtomEscape :: k GroupName

AtomEscape AtomEscape :: DecimalEscape

NonemptyClassRanges NonemptyClassRanges :: ClassAtom - ClassAtom ClassContents

NonemptyClassRangesNoDash NonemptyClassRangesNoDash :: ClassAtomNoDash - ClassAtom ClassContents

RegExpIdentifierStart RegExpIdentifierStart :: **** RegExpUnicodeEscapeSequence

RegExpIdentifierStart RegExpIdentifierStart :: UnicodeLeadSurrogate UnicodeTrailSurrogate

RegExpIdentifierPart RegExpIdentifierPart :: **** RegExpUnicodeEscapeSequence

RegExpIdentifierPart RegExpIdentifierPart :: UnicodeLeadSurrogate UnicodeTrailSurrogate

UnicodePropertyValueExpression UnicodePropertyValueExpression :: UnicodePropertyName = UnicodePropertyValue

UnicodePropertyValueExpression UnicodePropertyValueExpression :: LoneUnicodePropertyNameOrValue

CharacterClassEscape CharacterClassEscape :: P{ UnicodePropertyValueExpression }

CharacterClass CharacterClass :: [^ ClassContents ]

NestedClass NestedClass :: [^ ClassContents ]

ClassSetRange ClassSetRange :: ClassSetCharacter - ClassSetCharacter

22.2.1.2 Static Semantics: CountLeftCapturingParensWithin ( parseNode )

Soyut işlem CountLeftCapturingParensWithin; parseNode (bir Ayrıştırma Düğümü (Parse Node)) argümanını alır ve negatif olmayan bir tam sayı (integer) döndürür. parseNode içindeki sol-yakalama (left-capturing) parantezlerinin sayısını döndürür. Bir sol-yakalama parantezi,

Atom Atom :: ( GroupSpecifieropt Disjunction )

kuralının ( terminali ile eşleşen herhangi bir ( şablon karakteridir.

Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. İddia et (Assert): parseNode, RegExp Şablonu dilbilgisindeki (the RegExp Pattern grammar) bir kuralın örneğidir.

  2. parseNode içinde yer alan

Atom Atom :: ( GroupSpecifieropt Disjunction )

Ayrıştırma Düğümlerinin (Parse Nodes) sayısını döndür.

22.2.1.3 Static Semantics: CountLeftCapturingParensBefore ( parseNode )

Soyut işlem CountLeftCapturingParensBefore; parseNode (bir Ayrıştırma Düğümü (Parse Node)) argümanını alır ve negatif olmayan bir tam sayı (integer) döndürür. Kapsayan şablon (enclosing pattern) içinde, parseNode'un solunda yer alan sol-yakalama parantezlerinin (left-capturing parentheses) sayısını döndürür.

Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. İddia et (Assert): parseNode, RegExp Şablonu dilbilgisindeki (the RegExp Pattern grammar) bir kuralın örneğidir.

  2. pattern, parseNode'u içeren Pattern olsun.

  3. pattern içinde yer alan ve ya parseNode'dan önce gelen ya da parseNode'u içeren

Atom Atom :: ( GroupSpecifieropt Disjunction )

Ayrıştırma Düğümlerinin (Parse Nodes) sayısını döndür.

22.2.1.4 Static Semantics: MightBothParticipate ( x, y )

Soyut işlem MightBothParticipate; x (bir Ayrıştırma Düğümü (Parse Node)) ve y (bir Ayrıştırma Düğümü (Parse Node)) argümanlarını alır ve bir Boolean döndürür. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. İddia et (Assert): x ve y, aynı kapsayan Pattern'a sahiptir.

  2. Eğer kapsayan Pattern, ya x'in Alternative içinde yer aldığı ve y'nin türetilmiş Disjunction içinde yer aldığı ya da x'in türetilmiş Disjunction içinde yer aldığı ve y'nin Alternative içinde yer aldığı bir

Disjunction Disjunction :: Alternative | Disjunction

Ayrıştırma Düğümü (Parse Node) içeriyorsa, false döndür.

  1. true döndür.

22.2.1.5 Static Semantics: CapturingGroupNumber

Sözdizimi odaklı işlem (syntax-directed operation) CapturingGroupNumber hiçbir argüman almaz ve pozitif bir tam sayı (integer) döndürür.

Aşağıdaki kurallar (productions) üzerinden parça parça tanımlanır:

DecimalEscape DecimalEscape :: NonZeroDigit

  1. NonZeroDigit kuralının MV değerini döndür.

DecimalEscape DecimalEscape :: NonZeroDigit DecimalDigits

  1. n, DecimalDigits içindeki kod noktalarının sayısı olsun.

  2. (NonZeroDigit kuralının MV değeri × 10n artı DecimalDigits kuralının MV değeri) sonucunu döndür.

NonZeroDigit kuralının MV değeri” ve “DecimalDigits kuralının MV değeri” tanımları 12.9.3 bölümündedir.

22.2.1.6 Static Semantics: IsCharacterClass

Sözdizimi odaklı işlem (syntax-directed operation) IsCharacterClass hiçbir argüman almaz ve bir Boolean döndürür.

Aşağıdaki kurallar (productions) üzerinden parça parça tanımlanır:

ClassAtom ClassAtom :: -

ClassAtomNoDash ClassAtomNoDash :: SourceCharacter but not one of **** or ] or -

ClassEscape ClassEscape :: b - CharacterEscape

  1. false döndür.

ClassEscape ClassEscape :: CharacterClassEscape

  1. true döndür.

22.2.1.7 Static Semantics: CharacterValue

Sözdizimi odaklı işlem (syntax-directed operation) CharacterValue hiçbir argüman almaz ve negatif olmayan bir tam sayı (integer) döndürür.

Aşağıdaki kurallar (productions) üzerinden parça parça tanımlanır:

ClassAtom ClassAtom :: -

  1. U+002D (HYPHEN-MINUS) kod noktasının sayısal değerini döndür.

ClassAtomNoDash ClassAtomNoDash :: SourceCharacter but not one of **** or ] or -

  1. codePoint, SourceCharacter tarafından eşleştirilen kod noktası olsun.

  2. codePoint kod noktasının sayısal değerini döndür.

ClassEscape ClassEscape :: b

  1. U+0008 (BACKSPACE) kod noktasının sayısal değerini döndür.

ClassEscape ClassEscape :: -

  1. U+002D (HYPHEN-MINUS) kod noktasının sayısal değerini döndür.

CharacterEscape CharacterEscape :: ControlEscape

  1. Tablo 62 tablosuna göre sayısal değeri döndür.

Tablo 62: ControlEscape Kod Noktası Değerleri (ControlEscape Code Point Values)

ControlEscape Sayısal Değeri Kod Noktası Unicode Adı Sembol
t 9 U+0009 CHARACTER TABULATION
n 10 U+000A LINE FEED (LF)
v 11 U+000B LINE TABULATION
f 12 U+000C FORM FEED (FF)
r 13 U+000D CARRIAGE RETURN (CR)

CharacterEscape CharacterEscape :: c AsciiLetter

  1. codePoint, AsciiLetter tarafından eşleştirilen kod noktası olsun.

  2. i, codePoint kod noktasının sayısal değeri olsun.

  3. i değerinin 32 ile bölümünden kalanı döndür.

CharacterEscape CharacterEscape :: 0 [lookahead ∉ DecimalDigit]

  1. U+0000 (NULL) kod noktasının sayısal değerini döndür.

CharacterEscape CharacterEscape :: HexEscapeSequence

  1. HexEscapeSequence kuralının MV değerini döndür.

RegExpUnicodeEscapeSequence RegExpUnicodeEscapeSequence :: u HexLeadSurrogate \u HexTrailSurrogate

  1. lead, HexLeadSurrogate kuralının CharacterValue değeri olsun.

  2. trail, HexTrailSurrogate kuralının CharacterValue değeri olsun.

  3. codePoint, UTF16SurrogatePairToCodePoint(lead, trail) olsun.

  4. codePoint kod noktasının sayısal değerini döndür.

RegExpUnicodeEscapeSequence RegExpUnicodeEscapeSequence :: u Hex4Digits

  1. Hex4Digits kuralının MV değerini döndür.

RegExpUnicodeEscapeSequence RegExpUnicodeEscapeSequence :: u{ CodePoint }

  1. CodePoint kuralının MV değerini döndür.

HexLeadSurrogate HexLeadSurrogate :: Hex4Digits

HexTrailSurrogate HexTrailSurrogate :: Hex4Digits

HexNonSurrogate HexNonSurrogate :: Hex4Digits

  1. Hex4Digits kuralının MV değerini döndür.

CharacterEscape CharacterEscape :: IdentityEscape

  1. codePoint, IdentityEscape tarafından eşleştirilen kod noktası olsun.

  2. codePoint kod noktasının sayısal değerini döndür.

ClassSetCharacter ClassSetCharacter :: SourceCharacter but not ClassSetSyntaxCharacter

  1. codePoint, SourceCharacter tarafından eşleştirilen kod noktası olsun.

  2. codePoint kod noktasının sayısal değerini döndür.

ClassSetCharacter ClassSetCharacter :: **** ClassSetReservedPunctuator

  1. codePoint, ClassSetReservedPunctuator tarafından eşleştirilen kod noktası olsun.

  2. codePoint kod noktasının sayısal değerini döndür.

ClassSetCharacter ClassSetCharacter :: \b

  1. U+0008 (BACKSPACE) kod noktasının sayısal değerini döndür.

22.2.1.8 Static Semantics: MayContainStrings

Sözdizimi odaklı işlem (syntax-directed operation) MayContainStrings hiçbir argüman almaz ve bir Boolean döndürür. Aşağıdaki kurallar (productions) üzerinden parça parça tanımlanır:

CharacterClassEscape CharacterClassEscape :: d D s S w W P{ UnicodePropertyValueExpression }

UnicodePropertyValueExpression UnicodePropertyValueExpression :: UnicodePropertyName = UnicodePropertyValue

NestedClass NestedClass :: [^ ClassContents ]

ClassContents ClassContents :: [empty] NonemptyClassRanges

ClassSetOperand ClassSetOperand :: ClassSetCharacter

  1. false döndür.

UnicodePropertyValueExpression UnicodePropertyValueExpression :: LoneUnicodePropertyNameOrValue

  1. Eğer LoneUnicodePropertyNameOrValue tarafından eşleşen kaynak metin (source text matched by) Tablo 66 tablosunun “Property name” sütununda listelenen dize ikili özelliği (binary property of strings) ise, true döndür.

  2. false döndür.

ClassUnion ClassUnion :: ClassSetRange ClassUnionopt

  1. Eğer ClassUnion mevcutsa, ClassUnion kuralının MayContainStrings sonucunu döndür.

  2. false döndür.

ClassUnion ClassUnion :: ClassSetOperand ClassUnionopt

  1. Eğer ClassSetOperand kuralının MayContainStrings değeri true ise, true döndür.

  2. Eğer ClassUnion mevcutsa, ClassUnion kuralının MayContainStrings sonucunu döndür.

  3. false döndür.

ClassIntersection ClassIntersection :: ClassSetOperand && ClassSetOperand

  1. Eğer ilk ClassSetOperand kuralının MayContainStrings değeri false ise, false döndür.

  2. Eğer ikinci ClassSetOperand kuralının MayContainStrings değeri false ise, false döndür.

  3. true döndür.

ClassIntersection ClassIntersection :: ClassIntersection && ClassSetOperand

  1. Eğer ClassIntersection kuralının MayContainStrings değeri false ise, false döndür.

  2. Eğer ClassSetOperand kuralının MayContainStrings değeri false ise, false döndür.

  3. true döndür.

ClassSubtraction ClassSubtraction :: ClassSetOperand -- ClassSetOperand

  1. İlk ClassSetOperand kuralının MayContainStrings sonucunu döndür.

ClassSubtraction ClassSubtraction :: ClassSubtraction -- ClassSetOperand

  1. ClassSubtraction kuralının MayContainStrings sonucunu döndür.

ClassStringDisjunctionContents ClassStringDisjunctionContents :: ClassString | ClassStringDisjunctionContents

  1. Eğer ClassString kuralının MayContainStrings değeri true ise, true döndür.

  2. ClassStringDisjunctionContents kuralının MayContainStrings sonucunu döndür.

ClassString ClassString :: [empty]

  1. true döndür.

ClassString ClassString :: NonEmptyClassString

  1. NonEmptyClassString kuralının MayContainStrings sonucunu döndür.

NonEmptyClassString NonEmptyClassString :: ClassSetCharacter NonEmptyClassStringopt

  1. Eğer NonEmptyClassString mevcutsa, true döndür.

  2. false döndür.

22.2.1.9 Static Semantics: GroupSpecifiersThatMatch ( thisGroupName )

GroupSpecifiersThatMatch soyut işlemi, thisGroupName argümanını (bir GroupName Ayrıştırma Düğümü (Parse Node)) alır ve GroupSpecifier Ayrıştırma Düğümlerinin (Parse Nodes) bir Listesini (List) döndürür. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. name, thisGroupName bileşeninin CapturingGroupName değeri olsun.

  2. pattern, thisGroupName bileşenini içeren Pattern olsun.

  3. result, yeni bir boş Liste (List) olsun.

  4. pattern içinde yer alan her GroupSpecifier groupSpecifier için şunları yap:

    1. Eğer groupSpecifier bileşeninin CapturingGroupName değeri name ise, o zaman

      1. groupSpecifier düğümünü result listesine ekle.
  5. result döndür.

22.2.1.10 Static Semantics: CapturingGroupName

Sözdizimi odaklı işlem (syntax-directed operation) CapturingGroupName hiçbir argüman almaz ve bir Dize (String) döndürür. Aşağıdaki kurallar (productions) üzerinden parça parça tanımlanır:

GroupName GroupName :: <** *RegExpIdentifierName* **>

  1. idTextUnescaped, RegExpIdentifierName kuralının RegExpIdentifierCodePoints değeri olsun.

  2. CodePointsToString(idTextUnescaped) sonucunu döndür.

22.2.1.11 Static Semantics: RegExpIdentifierCodePoints

Sözdizimi odaklı işlem (syntax-directed operation) RegExpIdentifierCodePoints hiçbir argüman almaz ve kod noktalarından oluşan bir Liste (List) döndürür. Aşağıdaki kurallar (productions) üzerinden parça parça tanımlanır:

RegExpIdentifierName RegExpIdentifierName :: RegExpIdentifierStart

  1. codePoint, RegExpIdentifierStart kuralının RegExpIdentifierCodePoint değeri olsun.

  2. « codePoint » listesini döndür.

RegExpIdentifierName RegExpIdentifierName :: RegExpIdentifierName RegExpIdentifierPart

  1. cps, türetilmiş RegExpIdentifierName kuralının RegExpIdentifierCodePoints değeri olsun.

  2. codePoint, RegExpIdentifierPart kuralının RegExpIdentifierCodePoint değeri olsun.

  3. cps ile « codePoint » listesinin liste birleşimini (list-concatenation) döndür.

22.2.1.12 Static Semantics: RegExpIdentifierCodePoint

Sözdizimi odaklı işlem (syntax-directed operation) RegExpIdentifierCodePoint hiçbir argüman almaz ve bir kod noktası döndürür. Aşağıdaki kurallar (productions) üzerinden parça parça tanımlanır:

RegExpIdentifierStart RegExpIdentifierStart :: IdentifierStartChar

  1. IdentifierStartChar tarafından eşleştirilen kod noktasını döndür.

RegExpIdentifierPart RegExpIdentifierPart :: IdentifierPartChar

  1. IdentifierPartChar tarafından eşleştirilen kod noktasını döndür.

RegExpIdentifierStart RegExpIdentifierStart :: **** RegExpUnicodeEscapeSequence

RegExpIdentifierPart RegExpIdentifierPart :: **** RegExpUnicodeEscapeSequence

  1. Sayısal değeri RegExpUnicodeEscapeSequence kuralının CharacterValue değeri olan kod noktasını döndür.

RegExpIdentifierStart RegExpIdentifierStart :: UnicodeLeadSurrogate UnicodeTrailSurrogate

RegExpIdentifierPart RegExpIdentifierPart :: UnicodeLeadSurrogate UnicodeTrailSurrogate

  1. lead, sayısal değeri UnicodeLeadSurrogate tarafından eşleştirilen kod noktasının sayısal değeri olan kod birimi (code unit) olsun.

  2. trail, sayısal değeri UnicodeTrailSurrogate tarafından eşleştirilen kod noktasının sayısal değeri olan kod birimi (code unit) olsun.

  3. UTF16SurrogatePairToCodePoint(lead, trail) sonucunu döndür.

22.2.2 Pattern Semantics

Düzenli ifade deseni (regular expression pattern), aşağıda açıklanan işlem kullanılarak bir Soyut Kapanışa (Abstract Closure) dönüştürülür. Sonuçlar aynı olduğu sürece, uygulayıcıların aşağıda listelenenlerden daha verimli algoritmalar kullanmaları teşvik edilir. Soyut Kapanış (Abstract Closure), bir RegExp nesnesinin [[RegExpMatcher]] dahili yuvasının (internal slot) değeri olarak kullanılır.

İlişkili bayrakları (flags) ne u ne de v içeriyorsa, Pattern bir BMP desenidir. Aksi takdirde, bir Unicode desenidir. Bir BMP deseni, Temel Çok Dilli Düzlem (Basic Multilingual Plane) aralığındaki Unicode kod noktaları olan 16 bitlik değerlerden oluşan bir dizi olarak yorumlanan bir Dizgi (String) ile eşleştirilir. Bir Unicode deseni, UTF-16 kullanılarak kodlanmış Unicode kod noktalarından oluştuğu kabul edilen bir Dizgi (String) ile eşleştirilir. Bir BMP deseninin davranışını açıklama bağlamında "karakter" terimi, tek bir 16 bitlik Unicode BMP kod noktası anlamına gelir. Bir Unicode deseninin davranışını açıklama bağlamında "karakter" terimi, UTF-16 ile kodlanmış bir kod noktası anlamına gelir (6.1.4). Her iki bağlamda da "karakter değeri", karşılık gelen kodlanmamış kod noktasının sayısal değeri anlamına gelir.

Pattern'ın sözdizimi ve anlambilimi, sanki Pattern için kaynak metin, her bir SourceCharacter'ın bir Unicode kod noktasına karşılık geldiği SourceCharacter değerlerinin bir Listesi (List) imiş gibi tanımlanır. Eğer bir BMP deseni BMP olmayan bir SourceCharacter içeriyorsa, desenin tamamı UTF-16 kullanılarak kodlanır ve bu kodlamanın bireysel kod birimleri (code units), Listenin (List) öğeleri olarak kullanılır.

22.2.2.1 Notation

Aşağıdaki açıklamalarda şu dahili veri yapıları kullanılmaktadır:

  • Bir CharSetElement, aşağıdaki iki varlıktan biridir:

    • Eğer regexpRecord.[[UnicodeSets]] değeri false ise, CharSetElement, yukarıdaki Desen Anlambilimi (Pattern Semantics) anlamında bir karakterdir.

    • Eğer regexpRecord.[[UnicodeSets]] değeri true ise, CharSetElement, elemanları yukarıdaki Desen Anlambilimi (Pattern Semantics) anlamında karakterler olan bir dizidir. Bu, boş diziyi, tek karakterli dizileri ve birden fazla karakter içeren dizileri kapsar. Kolaylık sağlamak adına, bu tür CharSetElement'ler ile çalışırken, bireysel bir karakter, tek karakterlik bir dizi ile birbirinin yerine geçebilir şekilde ele alınır.

  • Bir CharSet, CharSetElement'lerden oluşan matematiksel bir kümedir.

  • Bir CaptureRange, bir yakalamaya (capture) dahil edilen karakter aralığını temsil eden bir { [[StartIndex]], [[EndIndex]] } Kaydıdır (Record). Burada [[StartIndex]], aralığın input içindeki başlangıç dizinini (dahil) temsil eden bir tam sayıdır (integer) ve [[EndIndex]], aralığın input içindeki bitiş dizinini (hariç) temsil eden bir tam sayıdır (integer). Herhangi bir CaptureRange için, bu dizinler [[StartIndex]][[EndIndex]] değişmezini (invariant) sağlamalıdır.

  • Bir MatchState, { [[Input]], [[EndIndex]], [[Captures]] } şeklinde bir Kayıttır (Record). Burada [[Input]], eşleştirilmekte olan Dizgiyi (String) temsil eden karakterlerden oluşan bir Listdir (List); [[EndIndex]], bir tam sayıdır (integer); ve [[Captures]], desendeki her bir sol yakalayıcı parantez (left-capturing parenthesis) için bir tane olmak üzere değerlerden oluşan bir Listdir (List). MatchState yapıları, düzenli ifade eşleştirme algoritmalarında kısmi eşleşme durumlarını temsil etmek için kullanılır. [[EndIndex]], desen tarafından şimdiye kadar eşleştirilen son girdi karakterinin dizininin bir fazlasıdır; [[Captures]] ise yakalayıcı parantezlerin sonuçlarını tutar. [[Captures]] listesinin n. elemanı, ya n. yakalayıcı parantez kümesi tarafından yakalanan karakter aralığını temsil eden bir CaptureRange yapısıdır ya da n. yakalayıcı parantez kümesine henüz ulaşılmamışsa undefined değeridir. Geri izleme (backtracking) nedeniyle, eşleştirme işlemi sırasında herhangi bir zamanda birçok MatchState kullanımda olabilir.

  • Bir MatcherContinuation, bir MatchState argümanı alan ve bir MatchState veya failure döndüren bir Soyut Kapanıştır (Abstract Closure). MatcherContinuation, desenin geri kalan kısmını (kapanışın yakaladığı değerler tarafından belirlenen), MatchState argümanı tarafından verilen ara durumdan başlayarak input ile eşleştirmeye çalışır. Eşleşme başarılı olursa, MatcherContinuation ulaştığı son MatchState durumunu döndürür; eşleşme başarısız olursa, failure döndürür.

  • Bir Matcher, iki argüman (bir MatchState ve bir MatcherContinuation) alan ve bir MatchState veya failure döndüren bir Soyut Kapanıştır (Abstract Closure). Bir Matcher, desenin bir orta alt desenini (kapanışın yakaladığı değerler tarafından belirlenen), MatchState argümanı tarafından verilen ara durumdan başlayarak MatchState'in [[Input]] değeri ile eşleştirmeye çalışır. MatcherContinuation argümanı, desenin geri kalanını eşleştiren bir kapanış olmalıdır. Alt deseni girdi ile eşleştirerek yeni bir MatchState elde ettikten sonra, Matcher, desenin geri kalanının da eşleşip eşleşemeyeceğini test etmek için bu yeni MatchState üzerinde MatcherContinuation çağrısı yapar. Eğer eşleşebilirse, Matcher, MatcherContinuation tarafından döndürülen MatchState durumunu döndürür; aksi takdirde, Matcher, karar noktalarında farklı seçenekler deneyebilir ve başarıya ulaşana veya tüm olasılıklar tükenene kadar tekrar tekrar MatcherContinuation çağrısı yapabilir.

22.2.2.1.1 RegExp Records

Bir RegExp Kaydı (RegExp Record), derleme ve muhtemelen eşleme sırasında ihtiyaç duyulan bir RegExp hakkındaki bilgileri depolamak için kullanılan bir Kayıt (Record) değeridir.

Aşağıdaki alanlara sahiptir:

Tablo 63: RegExp Kaydı (RegExp Record) Alanları

Alan Adı Değer Anlamı
[[IgnoreCase]] Boolean RegExp bayraklarında "i" bulunup bulunmadığını belirtir
[[Multiline]] Boolean RegExp bayraklarında "m" bulunup bulunmadığını belirtir
[[DotAll]] Boolean RegExp bayraklarında "s" bulunup bulunmadığını belirtir
[[Unicode]] Boolean RegExp bayraklarında "u" bulunup bulunmadığını belirtir
[[UnicodeSets]] Boolean RegExp bayraklarında "v" bulunup bulunmadığını belirtir
[[CapturingGroupsCount]] negatif olmayan tam sayı (integer) RegExp desenindeki sol yakalayıcı parantezlerin (left-capturing parentheses) sayısı

22.2.2.2 Runtime Semantics: CompilePattern

Sözdizimi odaklı işlem (syntax-directed operation) CompilePattern, regexpRecord argümanını (bir RegExp Kaydı (RegExp Record)) alır ve karakterlerden oluşan bir Liste (List) ile negatif olmayan bir tam sayı (integer) alan ve bir MatchState ya da failure döndüren bir Soyut Kapanış (Abstract Closure) döndürür. Aşağıdaki kurallar (productions) üzerinden parça parça tanımlanır:

Pattern Pattern :: Disjunction

  1. m, regexpRecord ve forward argümanları ile Disjunction kuralının CompileSubpattern değeri olsun.

  2. regexpRecord ve m değerlerini yakalayan ve çağrıldığında aşağıdaki adımları gerçekleştiren (input, index) parametreli yeni bir Soyut Kapanış (Abstract Closure) döndürür:

    1. Assert: input, karakterlerden oluşan bir Listdir (List).

    2. Assert: 0 ≤ indexinput içindeki elemanların sayısı.

    3. c, hiçbir şey yakalamayan ve çağrıldığında aşağıdaki adımları gerçekleştiren (y) parametreli yeni bir MatcherContinuation olsun:

      1. Assert: y, bir MatchState durumudur.

      2. y döndür.

    4. capability, 1'den regexpRecord.[[CapturingGroupsCount]]'a kadar dizinlenmiş, regexpRecord.[[CapturingGroupsCount]] adet undefined değerinden oluşan bir Liste (List) olsun.

    5. x, { [[Input]]: input, [[EndIndex]]: index, [[Captures]]: capability } şeklinde bir MatchState olsun.

    6. m(x, c) sonucunu döndür.

22.2.2.3 Runtime Semantics: CompileSubpattern

Sözdizimi odaklı işlem (syntax-directed operation) CompileSubpattern, regexpRecord (bir RegExp Kaydı (RegExp Record)) ve direction (forward veya backward) argümanlarını alır ve bir Matcher döndürür.

It is defined piecewise over the following productions:

Disjunction Disjunction :: Alternative | Disjunction

  1. Let m1 be CompileSubpattern of Alternative with arguments regexpRecord and direction.

  2. Let m2 be CompileSubpattern of Disjunction with arguments regexpRecord and direction.

  3. Return MatchTwoAlternatives(m1, m2).

Alternative Alternative :: [empty]

  1. Return EmptyMatcher().

Alternative Alternative :: Alternative Term

  1. Let m1 be CompileSubpattern of Alternative with arguments regexpRecord and direction.

  2. Let m2 be CompileSubpattern of Term with arguments regexpRecord and direction.

  3. Return MatchSequence(m1, m2, direction).

Term Term :: Assertion

  1. Return CompileAssertion of Assertion with argument regexpRecord.

Term Term :: Atom

  1. Return CompileAtom of Atom with arguments regexpRecord and direction.

Term Term :: Atom Quantifier

  1. Let m be CompileAtom of Atom with arguments regexpRecord and direction.

  2. Let q be CompileQuantifier of Quantifier.

  3. Assert: q.[[Min]]q.[[Max]].

  4. Let parenIndex be CountLeftCapturingParensBefore(Term).

  5. Let parenCount be CountLeftCapturingParensWithin(Atom).

  6. Return a new Matcher with parameters (x, c) that captures m, q, parenIndex, and parenCount and performs the following steps when called:

    1. Assert: x is a MatchState.

    2. Assert: c is a MatcherContinuation.

    3. Return RepeatMatcher(m, q.[[Min]], q.[[Max]], q.[[Greedy]], x, c, parenIndex, parenCount).

22.2.2.3.1 RepeatMatcher ( m, min, max, greedy, matchState, continue, parenIndex, parenCount )

RepeatMatcher soyut işlemi; m (bir Matcher), min (negatif olmayan bir tam sayı (integer)), max (negatif olmayan bir tam sayı (integer) veya +∞), greedy (bir Boolean), matchState (bir MatchState), continue (bir MatcherContinuation), parenIndex (negatif olmayan bir tam sayı (integer)) ve parenCount (negatif olmayan bir tam sayı (integer)) argümanlarını alır ve bir MatchState ya da failure döndürür. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. Eğer max = 0 ise, continue(matchState) sonucunu döndür.

  2. d, m, min, max, greedy, matchState, continue, parenIndex ve parenCount değerlerini yakalayan ve çağrıldığında aşağıdaki adımları gerçekleştiren (y) parametreli yeni bir MatcherContinuation olsun:

    1. Assert: y, bir MatchState durumudur.

    2. Eğer min = 0 ve y.[[EndIndex]] = matchState.[[EndIndex]] ise, failure döndür.

    3. Eğer min = 0 ise, min2 değeri 0 olsun; aksi takdirde min2 değeri min - 1 olsun.

    4. Eğer max = +∞ ise, max2 değeri +∞ olsun; aksi takdirde max2 değeri max - 1 olsun.

    5. RepeatMatcher(m, min2, max2, greedy, y, continue, parenIndex, parenCount) sonucunu döndür.

  3. capability, matchState.[[Captures]] listesinin bir kopyası olsun.

  4. parenIndex + 1'den parenIndex + parenCount'a kadar olan kapalı aralıktaki (inclusive interval) her k tam sayısı (integer) için, capability[k] değerini undefined olarak ayarla.

  5. input, matchState.[[Input]] olsun.

  6. e, matchState.[[EndIndex]] olsun.

  7. xr, { [[Input]]: input, [[EndIndex]]: e, [[Captures]]: capability } şeklinde bir MatchState olsun.

  8. Eğer min ≠ 0 ise, m(xr, d) sonucunu döndür.

  9. Eğer greedy değeri false ise, o zaman

    1. z, continue(matchState) olsun.

    2. Eğer z, failure değilse, z döndür.

    3. m(xr, d) sonucunu döndür.

  10. z, m(xr, d) olsun.

  11. Eğer z, failure değilse, z döndür.

  12. continue(matchState) sonucunu döndür.

22.2.2.3.2 EmptyMatcher ( )

EmptyMatcher soyut işlemi hiçbir argüman almaz ve bir Matcher döndürür. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. Return a new Matcher with parameters (matchState, continue) that captures nothing and performs the following steps when called:

    1. Assert: matchState is a MatchState.

    2. Assert: continue is a MatcherContinuation.

    3. Return continue(matchState).

22.2.2.3.3 MatchTwoAlternatives ( m1, m2 )

MatchTwoAlternatives soyut işlemi; m1 (bir Matcher) ve m2 (bir Matcher) argümanlarını alır ve bir Matcher döndürür. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. Return a new Matcher with parameters (matchState, continue) that captures m1 and m2 and performs the following steps when called:

    1. Assert: matchState is a MatchState.

    2. Assert: continue is a MatcherContinuation.

    3. Let result be m1(matchState, continue).

    4. If result is not failure, return result.

    5. Return m2(matchState, continue).

22.2.2.3.4 MatchSequence ( m1, m2, direction )

MatchSequence soyut işlemi; m1 (bir Matcher), m2 (bir Matcher) ve direction (forward veya backward) argümanlarını alır ve bir Matcher döndürür. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. If direction is forward, then

    1. Return a new Matcher with parameters (matchState, continue) that captures m1 and m2 and performs the following steps when called:

      1. Assert: matchState is a MatchState.

      2. Assert: continue is a MatcherContinuation.

      3. Let d be a new MatcherContinuation with parameters (y) that captures continue and m2 and performs the following steps when called:

         1. [Assert](06_sec-notational-conventions.md#assert): *y* is a [MatchState](#pattern-matchstate).
        
         2. Return *m2*(*y*, *continue*).
      4. Return m1(matchState, d).

  2. Assert: direction is backward.

  3. Return a new Matcher with parameters (matchState, continue) that captures m1 and m2 and performs the following steps when called:

    1. Assert: matchState is a MatchState.

    2. Assert: continue is a MatcherContinuation.

    3. Let d be a new MatcherContinuation with parameters (y) that captures continue and m1 and performs the following steps when called:

      1. Assert: y is a MatchState.

      2. Return m1(y, continue).

    4. Return m2(matchState, d).

22.2.2.4 Runtime Semantics: CompileAssertion

Sözdizimi odaklı işlem (syntax-directed operation) CompileAssertion, regexpRecord argümanını (bir RegExp Kaydı (RegExp Record)) alır ve bir Matcher döndürür.

It is defined piecewise over the following productions:

Assertion Assertion :: ^

  1. Return a new Matcher with parameters (matchState, continue) that captures regexpRecord and performs the following steps when called:

    1. Assert: matchState is a MatchState.

    2. Assert: continue is a MatcherContinuation.

    3. Let input be matchState.[[Input]].

    4. Let e be matchState.[[EndIndex]].

    5. If e = 0, or if regexpRecord.[[Multiline]] is true and the character input[e - 1] is matched by LineTerminator, then

      1. Return continue(matchState).
    6. Return failure.

Assertion Assertion :: $

  1. Return a new Matcher with parameters (matchState, continue) that captures regexpRecord and performs the following steps when called:

    1. Assert: matchState is a MatchState.

    2. Assert: continue is a MatcherContinuation.

    3. Let input be matchState.[[Input]].

    4. Let e be matchState.[[EndIndex]].

    5. Let inputLength be the number of elements in input.

    6. If e = inputLength, or if regexpRecord.[[Multiline]] is true and the character input[e] is matched by LineTerminator, then

      1. Return continue(matchState).
    7. Return failure.

Assertion Assertion :: \b

  1. Return a new Matcher with parameters (matchState, continue) that captures regexpRecord and performs the following steps when called:

    1. Assert: matchState is a MatchState.

    2. Assert: continue is a MatcherContinuation.

    3. Let input be matchState.[[Input]].

    4. Let e be matchState.[[EndIndex]].

    5. Let a be IsWordChar(regexpRecord, input, e - 1).

    6. Let b be IsWordChar(regexpRecord, input, e).

    7. If a is true and b is false, or if a is false and b is true, return continue(matchState).

    8. Return failure.

Assertion Assertion :: \B

  1. Return a new Matcher with parameters (matchState, continue) that captures regexpRecord and performs the following steps when called:

    1. Assert: matchState is a MatchState.

    2. Assert: continue is a MatcherContinuation.

    3. Let input be matchState.[[Input]].

    4. Let e be matchState.[[EndIndex]].

    5. Let a be IsWordChar(regexpRecord, input, e - 1).

    6. Let b be IsWordChar(regexpRecord, input, e).

    7. If a is true and b is true, or if a is false and b is false, return continue(matchState).

    8. Return failure.

Assertion Assertion :: (?= Disjunction )

  1. Let m be CompileSubpattern of Disjunction with arguments regexpRecord and forward.

  2. Return a new Matcher with parameters (matchState, continue) that captures m and performs the following steps when called:

    1. Assert: matchState is a MatchState.

    2. Assert: continue is a MatcherContinuation.

    3. Let d be a new MatcherContinuation with parameters (y) that captures nothing and performs the following steps when called:

      1. Assert: y is a MatchState.

      2. Return y.

    4. Let result be m(matchState, d).

    5. If result is failure, return failure.

    6. Assert: result is a MatchState.

    7. Let capability be result.[[Captures]].

    8. Let input be matchState.[[Input]].

    9. Let xe be matchState.[[EndIndex]].

    10. Let z be the MatchState { [[Input]]: input, [[EndIndex]]: xe, [[Captures]]: capability }.

    11. Return continue(z).

Assertion Assertion :: (?! Disjunction )

  1. m, regexpRecord ve forward argümanları ile Disjunction kuralının CompileSubpattern değeri olsun.

  2. m değerini yakalayan ve çağrıldığında aşağıdaki adımları gerçekleştiren (matchState, continue) parametreli yeni bir Matcher döndürür:

    1. Assert: matchState, bir MatchState durumudur.

    2. Assert: continue, bir MatcherContinuation kapanışıdır.

    3. d, hiçbir şey yakalamayan ve çağrıldığında aşağıdaki adımları gerçekleştiren (y) parametreli yeni bir MatcherContinuation olsun:

      1. Assert: y, bir MatchState durumudur.

      2. y döndür.

    4. result, m(matchState, d) olsun.

    5. Eğer result, failure değilse, failure döndür.

    6. continue(matchState) sonucunu döndür.

Assertion Assertion :: (?<= Disjunction )

  1. m, regexpRecord ve backward argümanları ile Disjunction kuralının CompileSubpattern değeri olsun.

  2. m değerini yakalayan ve çağrıldığında aşağıdaki adımları gerçekleştiren (matchState, continue) parametreli yeni bir Matcher döndürür:

    1. Assert: matchState, bir MatchState durumudur.

    2. Assert: continue, bir MatcherContinuation kapanışıdır.

    3. d, hiçbir şey yakalamayan ve çağrıldığında aşağıdaki adımları gerçekleştiren (y) parametreli yeni bir MatcherContinuation olsun:

      1. Assert: y, bir MatchState durumudur.

      2. y döndür.

    4. result, m(matchState, d) olsun.

    5. Eğer result, failure ise, failure döndür.

    6. Assert: result, bir MatchState durumudur.

    7. capability, result.[[Captures]] olsun.

    8. input, matchState.[[Input]] olsun.

    9. xe, matchState.[[EndIndex]] olsun.

    10. z, { [[Input]]: input, [[EndIndex]]: xe, [[Captures]]: capability } şeklinde bir MatchState olsun.

    11. continue(z) sonucunu döndür.

Assertion Assertion :: (?<! Disjunction )

  1. m, regexpRecord ve backward argümanları ile Disjunction kuralının CompileSubpattern değeri olsun.

  2. m değerini yakalayan ve çağrıldığında aşağıdaki adımları gerçekleştiren (matchState, continue) parametreli yeni bir Matcher döndürür:

    1. Assert: matchState, bir MatchState durumudur.

    2. Assert: continue, bir MatcherContinuation kapanışıdır.

    3. d, hiçbir şey yakalamayan ve çağrıldığında aşağıdaki adımları gerçekleştiren (y) parametreli yeni bir MatcherContinuation olsun:

      1. Assert: y, bir MatchState durumudur.

      2. y döndür.

    4. result, m(matchState, d) olsun.

    5. Eğer result, failure değilse, failure döndür.

    6. continue(matchState) sonucunu döndür.

22.2.2.4.1 IsWordChar ( regexpRecord, input, e )

IsWordChar soyut işlemi; regexpRecord (bir RegExp Kaydı (RegExp Record)), input (karakterlerden oluşan bir Liste (List)), ve e (bir tam sayı (integer)) argümanlarını alır ve bir Boolean döndürür. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. inputLength, input girdisindeki elemanların sayısı olsun.

  2. Eğer e = -1 veya e = inputLength ise, false döndür.

  3. char, input[e] karakteri olsun.

  4. Eğer WordCharacters(regexpRecord) kümesi char karakterini içeriyorsa, true döndür.

  5. false döndür.

22.2.2.5 Runtime Semantics: CompileQuantifier

Sözdizimi odaklı işlem (syntax-directed operation) CompileQuantifier hiçbir argüman almaz ve [[Min]] (negatif olmayan bir tam sayı (integer)), [[Max]] (negatif olmayan bir tam sayı (integer) veya +∞), ve [[Greedy]] (bir Boolean) alanlarına sahip bir Kayıt (Record) döndürür. Aşağıdaki kurallar (productions) üzerinden parça parça tanımlanır:

Quantifier Quantifier :: QuantifierPrefix

  1. qp, QuantifierPrefix kuralının CompileQuantifierPrefix değeri olsun.

  2. { [[Min]]: qp.[[Min]], [[Max]]: qp.[[Max]], [[Greedy]]: true } Kaydını (Record) döndür.

Quantifier Quantifier :: QuantifierPrefix ?

  1. qp, QuantifierPrefix kuralının CompileQuantifierPrefix değeri olsun.

  2. { [[Min]]: qp.[[Min]], [[Max]]: qp.[[Max]], [[Greedy]]: false } Kaydını (Record) döndür.

22.2.2.6 Runtime Semantics: CompileQuantifierPrefix

Sözdizimi odaklı işlem (syntax-directed operation) CompileQuantifierPrefix hiçbir argüman almaz ve [[Min]] (negatif olmayan bir tam sayı (integer)) ve [[Max]] (negatif olmayan bir tam sayı (integer) veya +∞) alanlarına sahip bir Kayıt (Record) döndürür. Aşağıdaki kurallar (productions) üzerinden parça parça tanımlanır:

QuantifierPrefix QuantifierPrefix :: *****

  1. { [[Min]]: 0, [[Max]]: +∞ } Kaydını (Record) döndür.

QuantifierPrefix QuantifierPrefix :: +

  1. { [[Min]]: 1, [[Max]]: +∞ } Kaydını (Record) döndür.

QuantifierPrefix QuantifierPrefix :: ?

  1. { [[Min]]: 0, [[Max]]: 1 } Kaydını (Record) döndür.

QuantifierPrefix QuantifierPrefix :: { DecimalDigits }

  1. i, DecimalDigits kuralının MV değeri olsun (bkz. 12.9.3).

  2. { [[Min]]: i, [[Max]]: i } Kaydını (Record) döndür.

QuantifierPrefix QuantifierPrefix :: { DecimalDigits ,}

  1. i, DecimalDigits kuralının MV değeri olsun.

  2. { [[Min]]: i, [[Max]]: +∞ } Kaydını (Record) döndür.

QuantifierPrefix QuantifierPrefix :: { DecimalDigits , DecimalDigits }

  1. i, ilk DecimalDigits kuralının MV değeri olsun.

  2. j, ikinci DecimalDigits kuralının MV değeri olsun.

  3. { [[Min]]: i, [[Max]]: j } Kaydını (Record) döndür.

22.2.2.7 Runtime Semantics: CompileAtom

Sözdizimi odaklı işlem (syntax-directed operation) CompileAtom, regexpRecord (bir RegExp Kaydı (RegExp Record)) ve direction (forward veya backward) argümanlarını alır ve bir Matcher döndürür.

Aşağıdaki kurallar (productions) üzerinden parça parça tanımlanır:

Atom Atom :: PatternCharacter

  1. char, PatternCharacter tarafından eşleştirilen karakter olsun.

  2. charSet, char karakterini içeren tek elemanlı bir CharSet olsun.

  3. CharacterSetMatcher(regexpRecord, charSet, false, direction) sonucunu döndür.

Atom Atom :: .

  1. charSet, AllCharacters(regexpRecord) olsun.

  2. Eğer regexpRecord.[[DotAll]] değeri true değilse, o zaman

    1. LineTerminator üretiminin sağ tarafındaki bir kod noktasına karşılık gelen tüm karakterleri charSet kümesinden çıkar.
  3. CharacterSetMatcher(regexpRecord, charSet, false, direction) sonucunu döndür.

Atom Atom :: CharacterClass

  1. cc, regexpRecord argümanı ile CharacterClass kuralının CompileCharacterClass değeri olsun.

  2. cs, cc.[[CharSet]] olsun.

  3. Eğer regexpRecord.[[UnicodeSets]] değeri false ise veya cs kümesinin her CharSetElement bileşeni tek bir karakterden oluşuyorsa (cs boş olsa bile), CharacterSetMatcher(regexpRecord, cs, cc.[[Invert]], direction) sonucunu döndür.

  4. Assert: cc.[[Invert]] değeri false olmalıdır.

  5. listOfMatchers, Matcher'lardan oluşan boş bir Liste (List) olsun.

  6. cs içindeki 1'den fazla karakter içeren her s CharSetElement bileşeni için, uzunluklarına göre azalan sırada yineleyerek şunları yap:

    1. cs2, s'nin son kod noktasını içeren tek elemanlı bir CharSet olsun.

    2. m2, CharacterSetMatcher(regexpRecord, cs2, false, direction) olsun.

    3. s içindeki her c1 kod noktası için, sondan bir önceki kod noktasından geriye doğru yineleyerek şunları yap:

      1. cs1, *c1 kod noktasını içeren tek elemanlı bir CharSet olsun.

      2. m1, CharacterSetMatcher(regexpRecord, cs1, false, direction) olsun.

      3. m2 değerini MatchSequence(m1, m2, direction) olarak ayarla.

    4. m2 değerini listOfMatchers listesine ekle.

  7. singles, cs kümesinin tek bir karakterden oluşan her CharSetElement bileşenini içeren CharSet olsun.

  8. CharacterSetMatcher(regexpRecord, singles, false, direction) sonucunu listOfMatchers listesine ekle.

  9. Eğer cs boş karakter dizisini içeriyorsa, EmptyMatcher() sonucunu listOfMatchers listesine ekle.

  10. m2, listOfMatchers listesindeki son Matcher olsun.

  11. listOfMatchers listesindeki her m1 Matcher için, sondan bir önceki elemandan geriye doğru yineleyerek şunları yap:

    1. m2 değerini MatchTwoAlternatives(m1, m2) olarak ayarla.
  12. m2 döndür.

Atom Atom :: ( GroupSpecifieropt Disjunction )

  1. m, regexpRecord ve direction argümanları ile Disjunction kuralının CompileSubpattern değeri olsun.

  2. parenIndex, CountLeftCapturingParensBefore(Atom) değeri olsun.

  3. direction, m, ve parenIndex değerlerini yakalayan ve çağrıldığında aşağıdaki adımları gerçekleştiren (x, c) parametreli yeni bir Matcher döndürür:

    1. Assert: x, bir MatchState durumudur.

    2. Assert: c, bir MatcherContinuation kapanışıdır.

    3. d, x, c, direction, ve parenIndex değerlerini yakalayan ve çağrıldığında aşağıdaki adımları gerçekleştiren (y) parametreli yeni bir MatcherContinuation olsun:

      1. Assert: y, bir MatchState durumudur.

      2. capability, y.[[Captures]] listesinin bir kopyası olsun.

      3. input, x.[[Input]] olsun.

      4. xe, x.[[EndIndex]] olsun.

      5. ye, y.[[EndIndex]] olsun.

      6. Eğer direction değeri forward ise, o zaman

         1. [Assert](06_sec-notational-conventions.md#assert): *xe* ≤ *ye*.
        
         2. *r*, { *[[StartIndex]]*: *xe*, *[[EndIndex]]*: *ye* } şeklinde bir [CaptureRange](#pattern-capturerange) olsun.
      7. Aksi takdirde,

         1. [Assert](06_sec-notational-conventions.md#assert): *direction* değeri `backward` olmalıdır.
        
         2. [Assert](06_sec-notational-conventions.md#assert): *ye* ≤ *xe*.
        
         3. *r*, { *[[StartIndex]]*: *ye*, *[[EndIndex]]*: *xe* } şeklinde bir [CaptureRange](#pattern-capturerange) olsun.
      8. capability[parenIndex + 1] değerini r olarak ayarla.

      9. z, { [[Input]]: input, [[EndIndex]]: ye, [[Captures]]: capability } şeklinde bir MatchState olsun.

      10. c(z) sonucunu döndür.

    4. m(x, d) sonucunu döndür.

Atom Atom :: (? RegularExpressionModifiers : Disjunction )

  1. addModifiers, RegularExpressionModifiers tarafından eşleşen kaynak metin (source text matched by) olsun.

  2. removeModifiers, boş Dize olsun.

  3. modifiedRer, UpdateModifiers(regexpRecord, CodePointsToString(addModifiers), removeModifiers) olsun.

  4. modifiedRer ve direction argümanları ile Disjunction kuralının CompileSubpattern sonucunu döndür.

Atom Atom :: (? RegularExpressionModifiers - RegularExpressionModifiers : Disjunction )

  1. addModifiers, ilk RegularExpressionModifiers tarafından eşleşen kaynak metin (source text matched by) olsun.

  2. removeModifiers, ikinci RegularExpressionModifiers tarafından eşleşen kaynak metin (source text matched by) olsun.

  3. modifiedRer, UpdateModifiers(regexpRecord, CodePointsToString(addModifiers), CodePointsToString(removeModifiers)) olsun.

  4. modifiedRer ve direction argümanları ile Disjunction kuralının CompileSubpattern sonucunu döndür.

AtomEscape AtomEscape :: DecimalEscape

  1. n, DecimalEscape kuralının CapturingGroupNumber değeri olsun.

  2. Assert: nregexpRecord.[[CapturingGroupsCount]].

  3. BackreferenceMatcher(regexpRecord, « n », direction) sonucunu döndür.

AtomEscape AtomEscape :: CharacterEscape

  1. charValue, CharacterEscape kuralının CharacterValue değeri olsun.

  2. char, karakter değeri charValue olan karakter olsun.

  3. charSet, char karakterini içeren tek elemanlı bir CharSet olsun.

  4. CharacterSetMatcher(regexpRecord, charSet, false, direction) sonucunu döndür.

AtomEscape AtomEscape :: CharacterClassEscape

  1. cs, regexpRecord argümanı ile CharacterClassEscape kuralının CompileToCharSet değeri olsun.

  2. Eğer regexpRecord.[[UnicodeSets]] değeri false ise veya cs kümesinin her CharSetElement bileşeni tek bir karakterden oluşuyorsa (cs boş olsa bile), CharacterSetMatcher(regexpRecord, cs, false, direction) sonucunu döndür.

  3. listOfMatchers, Matcher'lardan oluşan boş bir Liste (List) olsun.

  4. cs içindeki 1'den fazla karakter içeren her s CharSetElement bileşeni için, uzunluklarına göre azalan sırada yineleyerek şunları yap:

    1. cs2, s'nin son kod noktasını içeren tek elemanlı bir CharSet olsun.

    2. m2, CharacterSetMatcher(regexpRecord, cs2, false, direction) olsun.

    3. s içindeki her c1 kod noktası için, sondan bir önceki kod noktasından geriye doğru yineleyerek şunları yap:

      1. cs1, *c1 kod noktasını içeren tek elemanlı bir CharSet olsun.

      2. m1, CharacterSetMatcher(regexpRecord, cs1, false, direction) olsun.

      3. m2 değerini MatchSequence(m1, m2, direction) olarak ayarla.

    4. m2 değerini listOfMatchers listesine ekle.

  5. singles, cs kümesinin tek bir karakterden oluşan her CharSetElement bileşenini içeren CharSet olsun.

  6. CharacterSetMatcher(regexpRecord, singles, false, direction) sonucunu listOfMatchers listesine ekle.

  7. Eğer cs boş karakter dizisini içeriyorsa, EmptyMatcher() sonucunu listOfMatchers listesine ekle.

  8. m2, listOfMatchers listesindeki son Matcher olsun.

  9. listOfMatchers listesindeki her m1 Matcher için, sondan bir önceki elemandan geriye doğru yineleyerek şunları yap:

    1. m2 değerini MatchTwoAlternatives(m1, m2) olarak ayarla.
  10. m2 döndür.

AtomEscape AtomEscape :: k GroupName

  1. matchingGroupSpecifiers, GroupSpecifiersThatMatch(GroupName) olsun.

  2. parenIndices, yeni bir boş Liste (List) olsun.

  3. matchingGroupSpecifiers içindeki her GroupSpecifier groupSpecifier için şunları yap:

    1. parenIndex, CountLeftCapturingParensBefore(groupSpecifier) değeri olsun.

    2. parenIndex değerini parenIndices listesine ekle.

  4. BackreferenceMatcher(regexpRecord, parenIndices, direction) sonucunu döndür.

22.2.2.7.1 CharacterSetMatcher ( regexpRecord, charSet, invert, direction )

CharacterSetMatcher soyut işlemi; regexpRecord (bir RegExp Kaydı (RegExp Record)), charSet (bir CharSet), invert (bir Boolean), ve direction (forward veya backward) argümanlarını alır ve bir Matcher döndürür. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. Eğer regexpRecord.[[UnicodeSets]] değeri true ise, o zaman

    1. Assert: invert değeri false olmalıdır.

    2. Assert: charSet kümesinin her CharSetElement bileşeni tek bir karakterden oluşmalıdır.

  2. regexpRecord, charSet, invert, ve direction değerlerini yakalayan ve çağrıldığında aşağıdaki adımları gerçekleştiren (x, c) parametreli yeni bir Matcher döndürür:

    1. Assert: x, bir MatchState durumudur.

    2. Assert: c, bir MatcherContinuation kapanışıdır.

    3. input, x.[[Input]] olsun.

    4. endIndex, x.[[EndIndex]] olsun.

    5. Eğer direction değeri forward ise, f değeri endIndex + 1 olsun.

    6. Aksi takdirde, f değeri endIndex - 1 olsun.

    7. inputLength, input içindeki elemanların sayısı olsun.

    8. Eğer f < 0 veya f > inputLength ise, failure döndür.

    9. index, min(endIndex, f) olsun.

    10. char, input[index] karakteri olsun.

    11. cc, Canonicalize(regexpRecord, char) olsun.

    12. Eğer charSet içinde tam olarak bir a karakteri içeren ve Canonicalize(regexpRecord, a) değeri cc olan bir CharSetElement varsa, found değeri true olsun; aksi takdirde found değeri false olsun.

    13. Eğer invert değeri false ve found değeri false ise, failure döndür.

    14. Eğer invert değeri true ve found değeri true ise, failure döndür.

    15. capability, x.[[Captures]] olsun.

    16. y, { [[Input]]: input, [[EndIndex]]: f, [[Captures]]: capability } şeklinde bir MatchState olsun.

    17. c(y) sonucunu döndür.

22.2.2.7.2 BackreferenceMatcher ( regexpRecord, ns, direction )

BackreferenceMatcher soyut işlemi; regexpRecord (bir RegExp Kaydı (RegExp Record)), ns (pozitif tam sayılardan (integers) oluşan bir Liste (List)), ve direction (forward veya backward) argümanlarını alır ve bir Matcher döndürür. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. regexpRecord, ns, ve direction değerlerini yakalayan ve çağrıldığında aşağıdaki adımları gerçekleştiren (x, c) parametreli yeni bir Matcher döndürür:

    1. Assert: x, bir MatchState durumudur.

    2. Assert: c, bir MatcherContinuation kapanışıdır.

    3. input, x.[[Input]] olsun.

    4. capability, x.[[Captures]] olsun.

    5. r, undefined olsun.

    6. ns listesindeki her n tam sayısı (integer) için şunları yap:

      1. Eğer capability[n] değeri undefined değilse, o zaman

         1. [Assert](06_sec-notational-conventions.md#assert): *r* değeri `undefined` olmalıdır.
        
         2. *r* değerini *capability*[*n*] olarak ayarla.
    7. Eğer r değeri undefined ise, c(x) sonucunu döndür.

    8. endIndex, x.[[EndIndex]] olsun.

    9. rs, r.[[StartIndex]] olsun.

    10. re, r.[[EndIndex]] olsun.

    11. length, re - rs olsun.

    12. Eğer direction değeri forward ise, f değeri endIndex + length olsun.

    13. Aksi takdirde, f değeri endIndex - length olsun.

    14. inputLength, input içindeki elemanların sayısı olsun.

    15. Eğer f < 0 or f > inputLength ise, failure döndür.

    16. g, min(endIndex, f) olsun.

    17. Eğer 0'dan (dahil) length'e (hariç) kadar olan aralıkta (interval), Canonicalize(regexpRecord, input[rs + i]) değeri Canonicalize(regexpRecord, input[g + i]) değerinden farklı olacak şekilde en az bir i tam sayısı (integer) varsa, failure döndür.

    18. y, { [[Input]]: input, [[EndIndex]]: f, [[Captures]]: capability } şeklinde bir MatchState olsun.

    19. c(y) sonucunu döndür.

22.2.2.7.3 Canonicalize ( regexpRecord, char )

Canonicalize soyut işlemi; regexpRecord (bir RegExp Kaydı (RegExp Record)) ve char (bir karakter) argümanlarını alır ve bir karakter döndürür. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. Eğer HasEitherUnicodeFlag(regexpRecord) değeri true ve regexpRecord.[[IgnoreCase]] değeri true ise, o zaman

    1. Eğer Unicode Karakter Veritabanı'nın (Unicode Character Database) CaseFolding.txt dosyası char için basit veya ortak bir büyük/küçük harf eşleme (case folding mapping) sağlıyorsa, bu eşlemeyi char karakterine uygulamanın sonucunu döndür.

    2. char döndür.

  2. Eğer regexpRecord.[[IgnoreCase]] değeri false ise, char döndür.

  3. Assert: char, bir UTF-16 kod birimi olmalıdır.

  4. codePoint, sayısal değeri char'ın sayısal değeri olan kod noktası olsun.

  5. u, Unicode Varsayılan Harf Dönüştürme (Unicode Default Case Conversion) algoritmasına göre toUppercase(« codePoint ») olsun.

  6. uString, CodePointsToString(u) olsun.

  7. Eğer uString'in uzunluğu ≠ 1 ise, char döndür.

  8. codeUnit, uString'in tek kod birimi elemanı olsun.

  9. Eğer char'ın sayısal değeri ≥ 128 ve codeUnit'in sayısal değeri < 128 ise, char döndür.

  10. codeUnit döndür.

22.2.2.7.4 UpdateModifiers ( regexpRecord, add, remove )

UpdateModifiers soyut işlemi; regexpRecord (bir RegExp Kaydı (RegExp Record)), add (bir String), ve remove (bir String) argümanlarını alır ve bir RegExp Kaydı (RegExp Record) döndürür. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. Assert: add ve remove ortak hiçbir elemana sahip olmamalıdır.

  2. ignoreCase, regexpRecord.[[IgnoreCase]] olsun.

  3. multiline, regexpRecord.[[Multiline]] olsun.

  4. dotAll, regexpRecord.[[DotAll]] olsun.

  5. unicode, regexpRecord.[[Unicode]] olsun.

  6. unicodeSets, regexpRecord.[[UnicodeSets]] olsun.

  7. capturingGroupsCount, regexpRecord.[[CapturingGroupsCount]] olsun.

  8. Eğer remove "i" içeriyorsa, ignoreCase değerini false olarak ayarla.

  9. Aksi takdirde, eğer add "i" içeriyorsa, ignoreCase değerini true olarak ayarla.

  10. Eğer remove "m" içeriyorsa, multiline değerini false olarak ayarla.

  11. Aksi takdirde, eğer add "m" içeriyorsa, multiline değerini true olarak ayarla.

  12. Eğer remove "s" içeriyorsa, dotAll değerini false olarak ayarla.

  13. Aksi takdirde, eğer add "s" içeriyorsa, dotAll değerini true olarak ayarla.

  14. { [[IgnoreCase]]: ignoreCase, [[Multiline]]: multiline, [[DotAll]]: dotAll, [[Unicode]]: unicode, [[UnicodeSets]]: unicodeSets, [[CapturingGroupsCount]]: capturingGroupsCount } şeklinde RegExp Kaydını (RegExp Record) döndür.

22.2.2.8 Runtime Semantics: CompileCharacterClass

Sözdizimi odaklı işlem (syntax-directed operation) CompileCharacterClass, regexpRecord argümanını (bir RegExp Kaydı (RegExp Record)) alır ve [[CharSet]] (bir CharSet) ve [[Invert]] (bir Boolean) alanlarına sahip bir Kayıt (Record) döndürür. Aşağıdaki kurallar (productions) üzerinden parça parça tanımlanır:

CharacterClass CharacterClass :: [ ClassContents ]

  1. charSet, regexpRecord argümanı ile ClassContents kuralının CompileToCharSet değeri olsun.

  2. { [[CharSet]]: charSet, [[Invert]]: false } Kaydını (Record) döndür.

CharacterClass CharacterClass :: [^ ClassContents ]

  1. charSet, regexpRecord argümanı ile ClassContents kuralının CompileToCharSet değeri olsun.

  2. Eğer regexpRecord.[[UnicodeSets]] değeri true ise, o zaman

    1. { [[CharSet]]: CharacterComplement(regexpRecord, charSet), [[Invert]]: false } Kaydını (Record) döndür.
  3. { [[CharSet]]: charSet, [[Invert]]: true } Kaydını (Record) döndür.

22.2.2.9 Runtime Semantics: CompileToCharSet

Sözdizimi odaklı işlem (syntax-directed operation) CompileToCharSet, regexpRecord argümanını (bir RegExp Kaydı (RegExp Record)) alır ve bir CharSet döndürür.

Aşağıdaki kurallar (productions) üzerinden parça parça tanımlanır:

ClassContents ClassContents :: [empty]

  1. Boş CharSet kümesini döndür.

NonemptyClassRanges NonemptyClassRanges :: ClassAtom NonemptyClassRangesNoDash

  1. charSet, regexpRecord argümanı ile ClassAtom kuralının CompileToCharSet değeri olsun.

  2. otherSet, regexpRecord argümanı ile NonemptyClassRangesNoDash kuralının CompileToCharSet değeri olsun.

  3. charSet ve otherSet CharSet'lerinin birleşimini döndür.

NonemptyClassRanges NonemptyClassRanges :: ClassAtom - ClassAtom ClassContents

  1. charSet, regexpRecord argümanı ile ilk ClassAtom kuralının CompileToCharSet değeri olsun.

  2. otherSet, regexpRecord argümanı ile ikinci ClassAtom kuralının CompileToCharSet değeri olsun.

  3. remainingSet, regexpRecord argümanı ile ClassContents kuralının CompileToCharSet değeri olsun.

  4. rangeSet, CharacterRange(charSet, otherSet) olsun.

  5. rangeSet ve remainingSet birleşimini döndür.

NonemptyClassRangesNoDash NonemptyClassRangesNoDash :: ClassAtomNoDash NonemptyClassRangesNoDash

  1. charSet, regexpRecord argümanı ile ClassAtomNoDash kuralının CompileToCharSet değeri olsun.

  2. otherSet, regexpRecord argümanı ile NonemptyClassRangesNoDash kuralının CompileToCharSet değeri olsun.

  3. charSet ve otherSet CharSet'lerinin birleşimini döndür.

NonemptyClassRangesNoDash NonemptyClassRangesNoDash :: ClassAtomNoDash - ClassAtom ClassContents

  1. charSet, regexpRecord argümanı ile ClassAtomNoDash kuralının CompileToCharSet değeri olsun.

  2. otherSet, regexpRecord argümanı ile ClassAtom kuralının CompileToCharSet değeri olsun.

  3. remainingSet, regexpRecord argümanı ile ClassContents kuralının CompileToCharSet değeri olsun.

  4. rangeSet, CharacterRange(charSet, otherSet) olsun.

  5. rangeSet ve remainingSet birleşimini döndür.

ClassAtom ClassAtom :: -

  1. Tek - U+002D (HYPHEN-MINUS) karakterini içeren CharSet kümesini döndür.

ClassAtomNoDash ClassAtomNoDash :: SourceCharacter but not one of **** or ] or -

  1. SourceCharacter tarafından eşleştirilen karakteri içeren CharSet kümesini döndür.

ClassEscape ClassEscape :: b - CharacterEscape

  1. charValue, bu ClassEscape kuralının CharacterValue değeri olsun.

  2. char, karakter değeri charValue olan karakter olsun.

  3. Tek char karakterini içeren CharSet kümesini döndür.

CharacterClassEscape CharacterClassEscape :: d

  1. 0, 1, 2, 3, 4, 5, 6, 7, 8 ve 9 karakterlerini içeren on elemanlı CharSet kümesini döndür.

CharacterClassEscape CharacterClassEscape :: D

  1. charSet, şu kural tarafından döndürülen CharSet olsun:

CharacterClassEscape CharacterClassEscape :: d

.

  1. CharacterComplement(regexpRecord, charSet) sonucunu döndür.

CharacterClassEscape CharacterClassEscape :: s

  1. WhiteSpace veya LineTerminator kurallarının sağ tarafındaki bir kod noktasına karşılık gelen tüm karakterleri içeren CharSet kümesini döndür.

CharacterClassEscape CharacterClassEscape :: S

  1. charSet, şu kural tarafından döndürülen CharSet olsun:

CharacterClassEscape CharacterClassEscape :: s

.

  1. CharacterComplement(regexpRecord, charSet) sonucunu döndür.

CharacterClassEscape CharacterClassEscape :: w

  1. MaybeSimpleCaseFolding(regexpRecord, WordCharacters(regexpRecord)) sonucunu döndür.

CharacterClassEscape CharacterClassEscape :: W

  1. charSet, şu kural tarafından döndürülen CharSet olsun:

CharacterClassEscape CharacterClassEscape :: w

.

  1. CharacterComplement(regexpRecord, charSet) sonucunu döndür.

CharacterClassEscape CharacterClassEscape :: p{ UnicodePropertyValueExpression }

  1. regexpRecord argümanı ile UnicodePropertyValueExpression kuralının CompileToCharSet değerini döndür.

CharacterClassEscape CharacterClassEscape :: P{ UnicodePropertyValueExpression }

  1. charSet, regexpRecord argümanı ile UnicodePropertyValueExpression kuralının CompileToCharSet değeri olsun.

  2. Assert: charSet yalnızca tek kod noktaları içermelidir.

  3. CharacterComplement(regexpRecord, charSet) sonucunu döndür.

UnicodePropertyValueExpression UnicodePropertyValueExpression :: UnicodePropertyName = UnicodePropertyValue

  1. ps, UnicodePropertyName tarafından eşleşen kaynak metin (source text matched by) olsun.

  2. p, UnicodeMatchProperty(regexpRecord, ps) olsun.

  3. Assert: p, Tablo 64 tablosunun "Property name and aliases" sütununda listelenen bir Unicode özellik adı (property name) veya özellik takma adı (property alias) olmalıdır.

  4. vs, UnicodePropertyValue tarafından eşleşen kaynak metin (source text matched by) olsun.

  5. v, UnicodeMatchPropertyValue(p, vs) olsun.

  6. charSet, karakter veritabanı tanımı v değeri ile p özelliğini içeren tüm Unicode kod noktalarını barındıran CharSet olsun.

  7. MaybeSimpleCaseFolding(regexpRecord, charSet) sonucunu döndür.

UnicodePropertyValueExpression UnicodePropertyValueExpression :: LoneUnicodePropertyNameOrValue

  1. s, LoneUnicodePropertyNameOrValue tarafından eşleşen kaynak metin (source text matched by) olsun.

  2. Eğer UnicodeMatchPropertyValue(General_Category, s) değeri PropertyValueAliases.txt içinde listelenen General_Category (gc) özelliği için bir Unicode özellik değeri veya özellik değeri takma adı ise, o zaman

    1. Karakter veritabanı tanımı s değeri ile “General_Category” özelliğini içeren tüm Unicode kod noktalarını barındıran CharSet kümesini döndür.
  3. p, UnicodeMatchProperty(regexpRecord, s) olsun.

  4. Assert: p, Tablo 65 tablosunun "Property name and aliases" sütununda listelenen bir ikili Unicode özelliği (binary Unicode property) veya ikili özellik takma adı (binary property alias), ya da Tablo 66 tablosunun "Property name" sütununda listelenen dizelerin ikili bir Unicode özelliği (binary Unicode property of strings) olmalıdır.

  5. charSet, karakter veritabanı tanımı “True” değeri ile p özelliğini içeren tüm CharSetElements öğelerini barındıran CharSet olsun.

  6. MaybeSimpleCaseFolding(regexpRecord, charSet) sonucunu döndür.

ClassUnion ClassUnion :: ClassSetRange ClassUnionopt

  1. charSet, regexpRecord argümanı ile ClassSetRange kuralının CompileToCharSet değeri olsun.

  2. Eğer ClassUnion mevcutsa, o zaman

    1. otherSet, regexpRecord argümanı ile ClassUnion kuralının CompileToCharSet değeri olsun.

    2. charSet ve otherSet CharSet'lerinin birleşimini döndür.

  3. charSet döndür.

ClassUnion ClassUnion :: ClassSetOperand ClassUnionopt

  1. charSet, regexpRecord argümanı ile ClassSetOperand kuralının CompileToCharSet değeri olsun.

  2. Eğer ClassUnion mevcutsa, o zaman

    1. otherSet, regexpRecord argümanı ile ClassUnion kuralının CompileToCharSet değeri olsun.

    2. charSet ve otherSet CharSet'lerinin birleşimini döndür.

  3. charSet döndür.

ClassIntersection ClassIntersection :: ClassSetOperand && ClassSetOperand

  1. charSet, regexpRecord argümanı ile ilk ClassSetOperand kuralının CompileToCharSet değeri olsun.

  2. otherSet, regexpRecord argümanı ile ikinci ClassSetOperand kuralının CompileToCharSet değeri olsun.

  3. charSet ve otherSet CharSet'lerinin kesişimini döndür.

ClassIntersection ClassIntersection :: ClassIntersection && ClassSetOperand

  1. charSet, regexpRecord argümanı ile ClassIntersection kuralının CompileToCharSet değeri olsun.

  2. otherSet, regexpRecord argümanı ile ClassSetOperand kuralının CompileToCharSet değeri olsun.

  3. charSet ve otherSet CharSet'lerinin kesişimini döndür.

ClassSubtraction ClassSubtraction :: ClassSetOperand -- ClassSetOperand

  1. charSet, regexpRecord argümanı ile ilk ClassSetOperand kuralının CompileToCharSet değeri olsun.

  2. otherSet, regexpRecord argümanı ile ikinci ClassSetOperand kuralının CompileToCharSet değeri olsun.

  3. charSet kümesinin aynı zamanda otherSet kümesinin de CharSetElements bileşeni olmayan CharSetElements bileşenlerini içeren CharSet kümesini döndür.

ClassSubtraction ClassSubtraction :: ClassSubtraction -- ClassSetOperand

  1. charSet, regexpRecord argümanı ile ClassSubtraction kuralının CompileToCharSet değeri olsun.

  2. otherSet, regexpRecord argümanı ile ClassSetOperand kuralının CompileToCharSet değeri olsun.

  3. charSet kümesinin aynı zamanda otherSet kümesinin de CharSetElements bileşeni olmayan CharSetElements bileşenlerini içeren CharSet kümesini döndür.

ClassSetRange ClassSetRange :: ClassSetCharacter - ClassSetCharacter

  1. charSet, regexpRecord argümanı ile ilk ClassSetCharacter kuralının CompileToCharSet değeri olsun.

  2. otherSet, regexpRecord argümanı ile ikinci ClassSetCharacter kuralının CompileToCharSet değeri olsun.

  3. MaybeSimpleCaseFolding(regexpRecord, CharacterRange(charSet, otherSet)) sonucunu döndür.

ClassSetOperand ClassSetOperand :: ClassSetCharacter

  1. charSet, regexpRecord argümanı ile ClassSetCharacter kuralının CompileToCharSet değeri olsun.

  2. MaybeSimpleCaseFolding(regexpRecord, charSet) sonucunu döndür.

ClassSetOperand ClassSetOperand :: ClassStringDisjunction

  1. charSet, regexpRecord argümanı ile ClassStringDisjunction kuralının CompileToCharSet değeri olsun.

  2. MaybeSimpleCaseFolding(regexpRecord, charSet) sonucunu döndür.

ClassSetOperand ClassSetOperand :: NestedClass

  1. regexpRecord argümanı ile NestedClass kuralının CompileToCharSet değerini döndür.

NestedClass NestedClass :: [ ClassContents ]

  1. regexpRecord argümanı ile ClassContents kuralının CompileToCharSet değerini döndür.

NestedClass NestedClass :: [^ ClassContents ]

  1. charSet, regexpRecord argümanı ile ClassContents kuralının CompileToCharSet değeri olsun.

  2. CharacterComplement(regexpRecord, charSet) sonucunu döndür.

NestedClass NestedClass :: **** CharacterClassEscape

  1. regexpRecord argümanı ile CharacterClassEscape kuralının CompileToCharSet değerini döndür.

ClassStringDisjunction ClassStringDisjunction :: \q{ ClassStringDisjunctionContents }

  1. regexpRecord argümanı ile ClassStringDisjunctionContents kuralının CompileToCharSet değerini döndür.

ClassStringDisjunctionContents ClassStringDisjunctionContents :: ClassString

  1. s, regexpRecord argümanı ile ClassString kuralının CompileClassSetString değeri olsun.

  2. Tek s dizesini içeren CharSet kümesini döndür.

ClassStringDisjunctionContents ClassStringDisjunctionContents :: ClassString | ClassStringDisjunctionContents

  1. s, regexpRecord argümanı ile ClassString kuralının CompileClassSetString değeri olsun.

  2. Tek s dizesini içeren CharSet kümesi charSet olsun.

  3. otherSet, regexpRecord argümanı ile ClassStringDisjunctionContents kuralının CompileToCharSet değeri olsun.

  4. charSet ve otherSet CharSet'lerinin birleşimini döndür.

ClassSetCharacter ClassSetCharacter :: SourceCharacter but not ClassSetSyntaxCharacter **** CharacterEscape **** ClassSetReservedPunctuator

  1. charValue, bu ClassSetCharacter kuralının CharacterValue değeri olsun.

  2. char, karakter değeri charValue olan karakter olsun.

  3. Tek char karakterini içeren CharSet kümesini döndür.

ClassSetCharacter ClassSetCharacter :: \b

  1. Tek U+0008 (BACKSPACE) karakterini içeren CharSet kümesini döndür.
22.2.2.9.1 CharacterRange ( charSet, otherSet )

CharacterRange soyut işlemi; charSet (bir CharSet) ve otherSet (bir CharSet) argümanlarını alır ve bir CharSet döndürür. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. Assert: charSet ve otherSet kümelerinin her biri bir karakter içermelidir.

  2. a, CharSet charSet kümesindeki tek karakter olsun.

  3. b, CharSet otherSet kümesindeki tek karakter olsun.

  4. i, a karakterinin karakter değeri olsun.

  5. j, b karakterinin karakter değeri olsun.

  6. Assert: ij.

  7. Karakter değeri i ile j arasındaki kapalı aralıkta (inclusive interval) olan tüm karakterleri içeren CharSet kümesini döndür.

22.2.2.9.2 HasEitherUnicodeFlag ( regexpRecord )

HasEitherUnicodeFlag soyut işlemi, regexpRecord argümanını (bir RegExp Kaydı (RegExp Record)) alır ve bir Boolean döndürür. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. Eğer regexpRecord.[[Unicode]] değeri true ise veya regexpRecord.[[UnicodeSets]] değeri true ise, true döndür.

  2. false döndür.

22.2.2.9.3 WordCharacters ( regexpRecord )

WordCharacters soyut işlemi, regexpRecord argümanını (bir RegExp Kaydı (RegExp Record)) alır ve bir CharSet döndürür. \b, \B, \w ve \W amaçları doğrultusunda “kelime karakterleri” (word characters) olarak kabul edilen karakterleri içeren bir CharSet döndürür. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. basicWordChars, ASCII kelime karakterlerindeki (ASCII word characters) her karakteri içeren CharSet olsun.

  2. extraWordChars, c karakteri basicWordChars içinde olmayan ancak Canonicalize(regexpRecord, c) değeri basicWordChars içinde olan tüm c karakterlerini içeren CharSet olsun.

  3. Assert: HasEitherUnicodeFlag(regexpRecord) değeri true ve regexpRecord.[[IgnoreCase]] değeri true olmadıkça extraWordChars boş olmalıdır.

  4. basicWordChars ve extraWordChars birleşimini döndür.

22.2.2.9.4 AllCharacters ( regexpRecord )

AllCharacters soyut işlemi, regexpRecord argümanını (bir RegExp Kaydı (RegExp Record)) alır ve bir CharSet döndürür. Düzenli ifade bayraklarına göre “tüm karakterler” kümesini döndürür. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. Eğer regexpRecord.[[UnicodeSets]] değeri true ve regexpRecord.[[IgnoreCase]] değeri true ise, o zaman

    1. Basit Büyük/Küçük Harf Eşleme (Simple Case Folding) eşleştirmesi olmayan (yani scf(c)=c olan) tüm Unicode kod noktalarını c içeren CharSet kümesini döndür.
  2. Eğer HasEitherUnicodeFlag(regexpRecord) değeri true ise, o zaman

    1. Tüm kod noktası değerlerini içeren CharSet kümesini döndür.
  3. Tüm kod birimi (code unit) değerlerini içeren CharSet kümesini döndür.

22.2.2.9.5 MaybeSimpleCaseFolding ( regexpRecord, charSet )

MaybeSimpleCaseFolding soyut işlemi; regexpRecord (bir RegExp Kaydı (RegExp Record)) ve charSet (bir CharSet) argümanlarını alır ve bir CharSet döndürür. Eğer regexpRecord.[[UnicodeSets]] değeri false veya regexpRecord.[[IgnoreCase]] değeri false ise, charSet döndürür. Aksi takdirde, charSet kümesinin her CharSetElement bileşenini karakter karakter kanonik forma dönüştürmek için Unicode Karakter Veritabanı'nın CaseFolding.txt dosyasındaki Basit Büyük/Küçük Harf Eşleme (Simple Case Folding - scf(codePoint)) tanımlarını (her biri tek bir kod noktasını başka bir tek kod noktasına eşler) kullanır ve ortaya çıkan CharSet kümesini döndürür. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. Eğer regexpRecord.[[UnicodeSets]] değeri false veya regexpRecord.[[IgnoreCase]] değeri false ise, charSet döndür.

  2. otherSet, yeni bir boş CharSet olsun.

  3. charSet kümesinin her s CharSetElement bileşeni için şunları yap:

    1. t, boş bir karakter dizisi olsun.

    2. s içindeki her tek codePoint kod noktası için şunları yap:

      1. t'ye scf(codePoint) değerini ekle.
    3. t'yi otherSet kümesine ekle.

  4. otherSet döndür.

22.2.2.9.6 CharacterComplement ( regexpRecord, complement )

CharacterComplement soyut işlemi; regexpRecord (bir RegExp Kaydı (RegExp Record)) ve complement (bir CharSet) argümanlarını alır ve bir CharSet döndürür. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. charSet, AllCharacters(regexpRecord) olsun.

  2. charSet kümesinin aynı zamanda complement kümesinin de CharSetElements bileşeni olmayan CharSetElements bileşenlerini içeren CharSet kümesini döndür.

22.2.2.9.7 UnicodeMatchProperty ( regexpRecord, p )

UnicodeMatchProperty soyut işlemi; regexpRecord (bir RegExp Kaydı (RegExp Record)) ve p (ECMAScript kaynak metni (ECMAScript source text)) argümanlarını alır ve bir Unicode özellik adı döndürür. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. Eğer regexpRecord.[[UnicodeSets]] değeri true ise ve p, Tablo 66 tablosunun “Property name” sütununda listelenen dizelerin ikili bir Unicode özelliği ise, o zaman

    1. Unicode kod noktaları p'den oluşan Listeyi (List) döndür.
  2. Assert: p, Tablo 64 veya Tablo 65 tablolarının “Property name and aliases” sütununda listelenen bir Unicode özellik adı veya özellik takma adı olmalıdır.

  3. c, ilgili satırın “Canonical property name” sütununda verilen p'nin kanonik özellik adı olsun.

  4. Unicode kod noktaları c'den oluşan Listeyi (List) döndür.

Uygulamalar (implementations), Tablo 64, Tablo 65 ve Tablo 66 tablolarında listelenen Unicode özellik adlarını ve takma adlarını desteklemelidir. Birlikte çalışabilirliği (interoperability) sağlamak için uygulamalar başka hiçbir özellik adını veya takma adını desteklememelidir.

Tablo 64: İkili Olmayan Unicode Özellik Takma Adları ve Kanonik Özellik Adları (Non-binary Unicode property aliases and their canonical property names)

Özellik adı ve takma adları Kanonik özellik adı
General_Category General_Category
gc
Script Script
sc
Script_Extensions Script_Extensions
scx

Tablo 65: İkili Unicode Özellik Takma Adları ve Kanonik Özellik Adları (Binary Unicode property aliases and their canonical property names)

Özellik adı ve takma adları Kanonik özellik adı
ASCII ASCII
ASCII_Hex_Digit ASCII_Hex_Digit
AHex
Alphabetic Alphabetic
Alpha
Any Any
Assigned Assigned
Bidi_Control Bidi_Control
Bidi_C
Bidi_Mirrored Bidi_Mirrored
Bidi_M
Case_Ignorable Case_Ignorable
CI
Cased Cased
Changes_When_Casefolded Changes_When_Casefolded
CWCF
Changes_When_Casemapped Changes_When_Casemapped
CWCM
Changes_When_Lowercased Changes_When_Lowercased
CWL
Changes_When_NFKC_Casefolded Changes_When_NFKC_Casefolded
CWKCF
Changes_When_Titlecased Changes_When_Titlecased
CWT
Changes_When_Uppercased Changes_When_Uppercased
CWU
Dash Dash
Default_Ignorable_Code_Point Default_Ignorable_Code_Point
DI
Deprecated Deprecated
Dep
Diacritic Diacritic
Dia
Emoji Emoji
Emoji_Component Emoji_Component
EComp
Emoji_Modifier Emoji_Modifier
EMod
Emoji_Modifier_Base Emoji_Modifier_Base
EBase
Emoji_Presentation Emoji_Presentation
EPres
Extended_Pictographic Extended_Pictographic
ExtPict
Extender Extender
Ext
Grapheme_Base Grapheme_Base
Gr_Base
Grapheme_Extend Grapheme_Extend
Gr_Ext
Hex_Digit Hex_Digit
Hex
IDS_Binary_Operator IDS_Binary_Operator
IDSB
IDS_Trinary_Operator IDS_Trinary_Operator
IDST
ID_Continue ID_Continue
IDC
ID_Start ID_Start
IDS
Ideographic Ideographic
Ideo
Join_Control Join_Control
Join_C
Logical_Order_Exception Logical_Order_Exception
LOE
Lowercase Lowercase
Lower
Math Math
Noncharacter_Code_Point Noncharacter_Code_Point
NChar
Pattern_Syntax Pattern_Syntax
Pat_Syn
Pattern_White_Space Pattern_White_Space
Pat_WS
Quotation_Mark Quotation_Mark
QMark
Radical Radical
Regional_Indicator Regional_Indicator
RI
Sentence_Terminal Sentence_Terminal
STerm
Soft_Dotted Soft_Dotted
SD
Terminal_Punctuation Terminal_Punctuation
Term
Unified_Ideograph Unified_Ideograph
UIdeo
Uppercase Uppercase
Upper
Variation_Selector Variation_Selector
VS
White_Space White_Space
space
XID_Continue XID_Continue
XIDC
XID_Start XID_Start
XIDS

Tablo 66: Dizelerin İkili Unicode Özellikleri (Binary Unicode properties of strings)

Özellik adı
Basic_Emoji
Emoji_Keycap_Sequence
RGI_Emoji_Modifier_Sequence
RGI_Emoji_Flag_Sequence
RGI_Emoji_Tag_Sequence
RGI_Emoji_ZWJ_Sequence
RGI_Emoji
22.2.2.9.8 UnicodeMatchPropertyValue ( p, v )

UnicodeMatchPropertyValue soyut işlemi; p (ECMAScript kaynak metni (ECMAScript source text)) ve v (ECMAScript kaynak metni (ECMAScript source text)) argümanlarını alır ve bir Unicode özellik değeri döndürür. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. Assert: p, Tablo 64 tablosunun “Canonical property name” sütununda listelenen kanonik, takma adı olmayan bir Unicode özellik adı olmalıdır.

  2. Assert: v, PropertyValueAliases.txt dosyasında listelenen Unicode p özelliği için bir özellik değeri veya özellik değeri takma adı olmalıdır.

  3. value, ilgili satırın “Canonical property value” sütununda verilen v'nin kanonik özellik değeri olsun.

  4. Unicode kod noktaları value'dan oluşan Listeyi (List) döndür.

Uygulamalar, Tablo 64 tablosunda listelenen özellikler için PropertyValueAliases.txt dosyasında listelenen Unicode özellik değerlerini ve özellik değeri takma adlarını desteklemelidir. Birlikte çalışabilirliği sağlamak için uygulamalar başka hiçbir özellik değerini veya özellik değeri takma adını desteklememelidir.

22.2.2.10 Runtime Semantics: CompileClassSetString

Sözdizimi odaklı işlem (syntax-directed operation) CompileClassSetString, regexpRecord argümanını (bir RegExp Kaydı (RegExp Record)) alır ve karakter dizisi döndürür. Aşağıdaki kurallar (productions) üzerinden parça parça tanımlanır:

ClassString ClassString :: [empty]

  1. Boş bir karakter dizisi döndür.

ClassString ClassString :: NonEmptyClassString

  1. regexpRecord argümanı ile NonEmptyClassString kuralının CompileClassSetString sonucunu döndür.

NonEmptyClassString NonEmptyClassString :: ClassSetCharacter NonEmptyClassStringopt

  1. cs, regexpRecord argümanı ile ClassSetCharacter kuralının CompileToCharSet değeri olsun.

  2. s1, cs kümesinin tek CharSetElement bileşeni olan karakter dizisi olsun.

  3. Eğer NonEmptyClassString mevcutsa, o zaman

    1. s2, regexpRecord argümanı ile NonEmptyClassString kuralının CompileClassSetString değeri olsun.

    2. s1 ve s2 birleşimini (concatenation) döndür.

  4. s1 döndür.

22.2.3 Abstract Operations for RegExp Creation

22.2.3.1 RegExpCreate ( pattern, flags )

RegExpCreate soyut işlemi; pattern (bir ECMAScript dil değeri (ECMAScript language value)) ve flags (bir String veya undefined) argümanlarını alır ve bir Object barındıran olağan sonlanma (normal completion) ya da bir fırlatma sonlanması (throw completion) döndürür. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. obj, ! RegExpAlloc(%RegExp%) olsun.

  2. ? RegExpInitialize(obj, pattern, flags) sonucunu döndür.

22.2.3.2 RegExpAlloc ( newTarget )

RegExpAlloc soyut işlemi, newTarget argümanını (bir yapıcı (constructor)) alır ve bir Object barındıran olağan sonlanma (normal completion) ya da bir fırlatma sonlanması (throw completion) döndürür. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. obj, ? OrdinaryCreateFromConstructor(newTarget, "%RegExp.prototype%", « [[OriginalSource]], [[OriginalFlags]], [[RegExpRecord]], [[RegExpMatcher]] ») olsun.

  2. ! DefinePropertyOrThrow(obj, "lastIndex", PropertyDescriptor { [[Writable]]: true, [[Enumerable]]: false, [[Configurable]]: false }) işlemini gerçekleştir.

  3. obj döndür.

22.2.3.3 RegExpInitialize ( obj, pattern, flags )

RegExpInitialize soyut işlemi; obj (bir Object), pattern (bir ECMAScript dil değeri (ECMAScript language value)), ve flags (bir ECMAScript dil değeri (ECMAScript language value)) argümanlarını alır ve bir Object barındıran olağan sonlanma (normal completion) ya da bir fırlatma sonlanması (throw completion) döndürür. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. Eğer pattern değeri undefined ise, pattern değerini boş Dize (String) olarak ayarla.

  2. Aksi takdirde, pattern değerini ? ToString(pattern) olarak ayarla.

  3. Eğer flags değeri undefined ise, flags değerini boş Dize (String) olarak ayarla.

  4. Aksi takdirde, flags değerini ? ToString(flags) olarak ayarla.

  5. Eğer flags "d", "g", "i", "m", "s", "u", "v", veya "y" dışındaki herhangi bir kod birimini içeriyorsa, bir SyntaxError istisnası fırlat.

  6. Eğer flags herhangi bir kod birimini birden fazla kez içeriyorsa, bir SyntaxError istisnası fırlat.

  7. Eğer flags "i" içeriyorsa, i değeri true olsun; aksi takdirde i değeri false olsun.

  8. Eğer flags "m" içeriyorsa, m değeri true olsun; aksi takdirde m değeri false olsun.

  9. Eğer flags "s" içeriyorsa, s değeri true olsun; aksi takdirde s değeri false olsun.

  10. Eğer flags "u" içeriyorsa, u değeri true olsun; aksi takdirde u değeri false olsun.

  11. Eğer flags "v" içeriyorsa, v değeri true olsun; aksi takdirde v değeri false olsun.

  12. Eğer u değeri true veya v değeri true ise, o zaman

    1. patternText, StringToCodePoints(pattern) olsun.
  13. Aksi takdirde,

    1. patternText, pattern'ın 16 bitlik her elemanının Unicode BMP kod noktası olarak yorumlanmasının sonucu olsun. Elemanlara UTF-16 kod çözümü uygulanmaz.
  14. parseResult, ParsePattern(patternText, u, v) olsun.

  15. Eğer parseResult, SyntaxError nesnelerinden oluşan boş olmayan bir Liste (List) ise, bir SyntaxError istisnası fırlat.

  16. Assert: parseResult, bir Pattern Ayrıştırma Düğümü (Parse Node) olmalıdır.

  17. obj.[[OriginalSource]] değerini pattern olarak ayarla.

  18. obj.[[OriginalFlags]] değerini flags olarak ayarla.

  19. capturingGroupsCount, CountLeftCapturingParensWithin(parseResult) olsun.

  20. regexpRecord, { [[IgnoreCase]]: i, [[Multiline]]: m, [[DotAll]]: s, [[Unicode]]: u, [[UnicodeSets]]: v, [[CapturingGroupsCount]]: capturingGroupsCount } şeklinde RegExp Kaydı (RegExp Record) olsun.

  21. obj.[[RegExpRecord]] değerini regexpRecord olarak ayarla.

  22. obj.[[RegExpMatcher]] değerini, regexpRecord argümanı ile parseResult kuralının CompilePattern değeri olarak ayarla.

  23. ? Set(obj, "lastIndex", +0𝔽, true) işlemini gerçekleştir.

  24. obj döndür.

22.2.3.4 Static Semantics: ParsePattern ( patternText, u, v )

ParsePattern soyut işlemi; patternText (Unicode kod noktaları dizisi), u (bir Boolean), ve v (bir Boolean) argümanlarını alır ve bir Ayrıştırma Düğümü (Parse Node) ya da SyntaxError nesnelerinden oluşan boş olmayan bir Liste (List) döndürür.

Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. Eğer v değeri true ve u değeri true ise, o zaman

    1. parseResult, bir veya daha fazla SyntaxError nesnesi içeren bir Liste (List) olsun.
  2. Aksi takdirde, eğer v değeri true ise, o zaman

    1. parseResult, ParseText(patternText, Pattern[+UnicodeMode, +UnicodeSetsMode, +NamedCaptureGroups]) olsun.
  3. Aksi takdirde, eğer u değeri true ise, o zaman

    1. parseResult, ParseText(patternText, Pattern[+UnicodeMode, ~UnicodeSetsMode, +NamedCaptureGroups]) olsun.
  4. Aksi takdirde,

    1. parseResult, ParseText(patternText, Pattern[~UnicodeMode, ~UnicodeSetsMode, +NamedCaptureGroups]) olsun.
  5. parseResult döndür.

22.2.4 The RegExp Constructor

RegExp yapıcısı (constructor):

  • %RegExp%'tir.

  • küresel nesnenin (global object) "RegExp" özelliğinin ilk değeridir.

  • bir yapıcı (constructor) olarak çağrıldığında yeni bir RegExp nesnesi oluşturur ve ilklendirir.

  • bir yapıcı yerine fonksiyon olarak çağrıldığında, yeni bir RegExp nesnesi veya tek argüman bir RegExp nesnesi ise argümanın kendisini döndürür.

  • bir sınıf tanımının extends ifadesinin değeri olarak kullanılabilir. Belirtilen RegExp davranışını miras almak isteyen alt sınıf yapıcıları (constructors), gerekli dahili yuvalara sahip alt sınıf örneklerini oluşturmak ve ilklendirmek için RegExp yapıcısına (constructor) bir super çağrısı içermelidir.

22.2.4.1 RegExp ( patternOrRegexp, flags )

Bu fonksiyon çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. patternIsRegExp, ? IsRegExp(patternOrRegexp) olsun.

  2. Eğer NewTarget undefined ise, o zaman

    1. newTarget, etkin fonksiyon nesnesi (active function object) olsun.

    2. Eğer patternIsRegExp true ise ve flags undefined ise, o zaman

      1. patternCtor, ? Get(patternOrRegexp, "constructor") olsun.

      2. Eğer SameValue(newTarget, patternCtor) true ise, patternOrRegexp döndür.

  3. Aksi takdirde,

    1. newTarget, NewTarget olsun.
  4. Eğer patternOrRegexp bir Nesne ise (is an Object) ve patternOrRegexp nesnesinin bir [[RegExpMatcher]] dahili yuvası varsa, o zaman

    1. patternSource, patternOrRegexp.[[OriginalSource]] olsun.

    2. Eğer flags undefined ise, flags değerini patternOrRegexp.[[OriginalFlags]] olarak ayarla.

  5. Aksi takdirde, eğer patternIsRegExp true ise, o zaman

    1. patternSource, ? Get(patternOrRegexp, "source") olsun.

    2. Eğer flags undefined ise, o zaman

      1. flags değerini ? Get(patternOrRegexp, "flags") olarak ayarla.
  6. Aksi takdirde,

    1. patternSource, patternOrRegexp olsun.
  7. obj, ? RegExpAlloc(newTarget) olsun.

  8. Dönüş değeri: ? RegExpInitialize(obj, patternSource, flags).

22.2.5 Properties of the RegExp Constructor

The RegExp constructor:

  • has a [[Prototype]] internal slot whose value is %Function.prototype%.

  • has the following properties:

22.2.5.1 RegExp.escape ( string )

Bu fonksiyon, string ifadesinin, düzenli ifade (regular expression) şablonunda Pattern potansiyel olarak özel olan karakterlerin eşdeğer kaçış dizileriyle değiştirildiği bir kopyasını döndürür.

Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. Eğer string bir String değilse (is not a String), bir TypeError istisnası fırlatır.

  2. escaped, boş Dizgi olsun.

  3. codePointList, StringToCodePoints(string) olsun.

  4. codePointList listesindeki her codePoint kod noktası için aşağıdakileri yap:

    1. Eğer escaped boş Dizgi ise ve codePoint, DecimalDigit veya AsciiLetter kurallarından biriyle eşleşiyorsa, o zaman

      1. NOTE: Başta gelen bir rakamın kaçış karakteriyle yazılması, çıktının bir \0 karakter kaçışından veya \1 gibi bir DecimalEscape'ten sonra kullanılabilecek şablon metniyle eşleşmesini ve önceki kaçış dizisinin bir uzantısı olarak yorumlanmak yerine string ile eşleşmeye devam etmesini sağlar. Başta gelen bir ASCII harfinin kaçış karakteriyle yazılması, \c sonrasındaki bağlam için de aynı işlevi görür.

      2. numericValue, codePoint değerinin sayısal değeri olsun.

      3. hex, Number::toString(𝔽(numericValue), 16) olsun.

      4. Assert: hex uzunluğu 2'dir.

      5. escaped değerini, 0x005C (REVERSE SOLIDUS) kod birimi, "x" ve hex değerlerinin dizgi birleşimi (string-concatenation) olarak ayarla.

    2. Aksi takdirde,

      1. escaped değerini, escaped ile EncodeForRegExpEscape(codePoint) değerinin dizgi birleşimi (string-concatenation) olarak ayarla.
  5. Return escaped.

22.2.5.1.1 EncodeForRegExpEscape ( codePoint )

EncodeForRegExpEscape soyut işlemi, codePoint (bir kod noktası) argümanını alır ve bir String döndürür. codePoint ile eşleşecek bir Pattern şablonunu temsil eden bir String döndürür. Eğer codePoint boşluk veya bir ASCII noktalama işareti ise, döndürülen değer bir kaçış dizisidir. Aksi takdirde, döndürülen değer codePoint değerinin kendisinin bir String temsilidir. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. Eğer codePoint, SyntaxCharacter ile eşleşiyorsa veya codePoint U+002F (SOLIDUS) ise, o zaman

    1. 0x005C (REVERSE SOLIDUS) ile UTF16EncodeCodePoint(codePoint) değerlerinin dizgi birleşimini (string-concatenation) döndür.
  2. Eğer codePoint, Tablo 62 tablosunun "Code Point" sütununda listelenen bir kod noktası ise, o zaman

    1. 0x005C (REVERSE SOLIDUS) ile, "Code Point" sütunu codePoint kod noktasını içeren satırın "ControlEscape" sütunundaki dizginin dizgi birleşimini (string-concatenation) döndür.
  3. otherPunctuators, ",-=<>#&!%:;@~'"` ile 0x0022 (QUOTATION MARK) kod biriminin dizgi birleşimi (string-concatenation) olsun.

  4. toEscape, StringToCodePoints(otherPunctuators) olsun.

  5. Eğer toEscape değeri codePoint içeriyorsa, veya codePoint WhiteSpace ya da LineTerminator kurallarından biriyle eşleşiyorsa, ya da codePoint bir üst surrogate (leading surrogate) veya alt surrogate (trailing surrogate) ile aynı sayısal değere sahipse, o zaman

    1. codePointNumber, codePoint değerinin sayısal değeri olsun.

    2. Eğer codePointNumber ≤ 0xFF ise, o zaman

      1. hex, Number::toString(𝔽(codePointNumber), 16) olsun.

      2. 0x005C (REVERSE SOLIDUS) kod birimi, "x" ve StringPad(hex, 2, "0", start) değerlerinin dizgi birleşimini (string-concatenation) döndür.

    3. escaped, boş Dizgi olsun.

    4. codeUnits, UTF16EncodeCodePoint(codePoint) olsun.

    5. codeUnits listesindeki her codeUnit kod birimi için aşağıdakileri yap:

      1. escaped değerini, escaped ile UnicodeEscape(codeUnit) değerinin dizgi birleşimi (string-concatenation) olarak ayarla.
    6. Return escaped.

  6. Return UTF16EncodeCodePoint(codePoint).

22.2.5.2 RegExp.prototype

The initial value of RegExp.prototype is the RegExp prototype object.

This property has the attributes { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false }.

22.2.5.3 get RegExp [ %Symbol.species% ]

RegExp[%Symbol.species%] is an accessor property whose set accessor function is undefined. Its get accessor function performs the following steps when called:

  1. Return the this value.

The value of the "name" property of this function is "get [Symbol.species]".

22.2.6 Properties of the RegExp Prototype Object

RegExp prototip nesnesi:

  • %RegExp.prototype%'tir.

  • bir sıradan nesnedir (ordinary object).

  • bir RegExp örneği (instance) değildir ve [[RegExpMatcher]] dahili yuvasına veya RegExp örnek nesnelerinin diğer dahili yuvalarından herhangi birine sahip değildir.

  • değeri %Object.prototype% olan bir [[Prototype]] dahili yuvasına sahiptir.

22.2.6.1 RegExp.prototype.constructor

The initial value of RegExp.prototype.constructor is %RegExp%.

22.2.6.2 RegExp.prototype.exec ( string )

Bu metot, string içinde düzenli ifade şablonunun bir eşleşmesini arar ve eşleşme sonuçlarını içeren bir Dizi (Array) ya da string eşleşmediyse null döndürür.

Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. regexp, this değeri olsun.

  2. ? RequireInternalSlot(regexp, [[RegExpMatcher]]) işlemini gerçekleştir.

  3. string değerini ? ToString(string) olarak ayarla.

  4. Return ? RegExpBuiltinExec(regexp, string).

22.2.6.3 get RegExp.prototype.dotAll

RegExp.prototype.dotAll bir erişici özelliğidir (accessor property) ve küme erişici (set accessor) fonksiyonu undefined'dır. Getiri erişici (get accessor) fonksiyonu çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. regexp, this değeri olsun.

  2. codeUnit, 0x0073 (LATIN SMALL LETTER S) kod birimi olsun.

  3. Return ? RegExpHasFlag(regexp, codeUnit).

22.2.6.4 get RegExp.prototype.flags

RegExp.prototype.flags bir erişici özelliğidir (accessor property) ve küme erişici (set accessor) fonksiyonu undefined'dır. Getiri erişici (get accessor) fonksiyonu çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. regexp, this değeri olsun.

  2. Eğer regexp bir Nesne değilse (is not an Object), bir TypeError istisnası fırlatır.

  3. codeUnits, yeni boş bir Liste (List) olsun.

  4. hasIndices, ToBoolean(? Get(regexp, "hasIndices")) olsun.

  5. Eğer hasIndices true ise, codeUnits listesine 0x0064 (LATIN SMALL LETTER D) kod birimini ekle.

  6. global, ToBoolean(? Get(regexp, "global")) olsun.

  7. Eğer global true ise, codeUnits listesine 0x0067 (LATIN SMALL LETTER G) kod birimini ekle.

  8. ignoreCase, ToBoolean(? Get(regexp, "ignoreCase")) olsun.

  9. Eğer ignoreCase true ise, codeUnits listesine 0x0069 (LATIN SMALL LETTER I) kod birimini ekle.

  10. multiline, ToBoolean(? Get(regexp, "multiline")) olsun.

  11. Eğer multiline true ise, codeUnits listesine 0x006D (LATIN SMALL LETTER M) kod birimini ekle.

  12. dotAll, ToBoolean(? Get(regexp, "dotAll")) olsun.

  13. Eğer dotAll true ise, codeUnits listesine 0x0073 (LATIN SMALL LETTER S) kod birimini ekle.

  14. unicode, ToBoolean(? Get(regexp, "unicode")) olsun.

  15. Eğer unicode true ise, codeUnits listesine 0x0075 (LATIN SMALL LETTER U) kod birimini ekle.

  16. unicodeSets, ToBoolean(? Get(regexp, "unicodeSets")) olsun.

  17. Eğer unicodeSets true ise, codeUnits listesine 0x0076 (LATIN SMALL LETTER V) kod birimini ekle.

  18. sticky, ToBoolean(? Get(regexp, "sticky")) olsun.

  19. Eğer sticky true ise, codeUnits listesine 0x0079 (LATIN SMALL LETTER Y) kod birimini ekle.

  20. Kod birimleri codeUnits Listesinin (List) öğeleri olan String değerini döndür. Eğer codeUnits listesinin hiçbir öğesi yoksa, boş Dizgi döndürülür.

22.2.6.4.1 RegExpHasFlag ( regexp, codeUnit )

RegExpHasFlag soyut işlemi; regexp (bir ECMAScript dil değeri (ECMAScript language value)) ve codeUnit (bir kod birimi) argümanlarını alır ve ya Boolean ya da undefined içeren bir olağan tamamlanma (normal completion containing) ya da bir fırlatma tamamlanması (throw completion) döndürür. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. Eğer regexp bir Nesne değilse (is not an Object), bir TypeError istisnası fırlatır.

  2. Eğer regexp bir [[OriginalFlags]] dahili yuvasına sahip değilse, o zaman

    1. Eğer SameValue(regexp, %RegExp.prototype%) true ise, undefined döndür.

    2. Bir TypeError istisnası fırlatır.

  3. flags, regexp.[[OriginalFlags]] olsun.

  4. Eğer flags codeUnit içeriyorsa, true döndür.

  5. Return false.

22.2.6.5 get RegExp.prototype.global

RegExp.prototype.global bir erişici özelliğidir (accessor property) ve küme erişici (set accessor) fonksiyonu undefined'dır. Getiri erişici (get accessor) fonksiyonu çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. regexp, this değeri olsun.

  2. codeUnit, 0x0067 (LATIN SMALL LETTER G) kod birimi olsun.

  3. Return ? RegExpHasFlag(regexp, codeUnit).

22.2.6.6 get RegExp.prototype.hasIndices

RegExp.prototype.hasIndices bir erişici özelliğidir (accessor property) ve küme erişici (set accessor) fonksiyonu undefined'dır. Getiri erişici (get accessor) fonksiyonu çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. regexp, this değeri olsun.

  2. codeUnit, 0x0064 (LATIN SMALL LETTER D) kod birimi olsun.

  3. Return ? RegExpHasFlag(regexp, codeUnit).

22.2.6.7 get RegExp.prototype.ignoreCase

RegExp.prototype.ignoreCase bir erişici özelliğidir (accessor property) ve küme erişici (set accessor) fonksiyonu undefined'dır. Getiri erişici (get accessor) fonksiyonu çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. regexp, this değeri olsun.

  2. codeUnit, 0x0069 (LATIN SMALL LETTER I) kod birimi olsun.

  3. Return ? RegExpHasFlag(regexp, codeUnit).

22.2.6.8 RegExp.prototype [ %Symbol.match% ] ( string )

Bu metot çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. regexp, this değeri olsun.

  2. Eğer regexp bir Nesne değilse (is not an Object), bir TypeError istisnası fırlatır.

  3. string değerini ? ToString(string) olarak ayarla.

  4. flags, ? ToString(? Get(regexp, "flags")) olsun.

  5. Eğer flags "g" içermiyorsa, Dönüş değeri: ? RegExpExec(regexp, string).

  6. Eğer flags "u" veya flags "v" içeriyorsa, fullUnicode true olsun; aksi takdirde fullUnicode false olsun.

  7. ? Set(regexp, "lastIndex", +0𝔽, true) işlemini gerçekleştir.

  8. array, ! ArrayCreate(0) olsun.

  9. matchCount, 0 olsun.

  10. Tekrarla,

    1. result, ? RegExpExec(regexp, string) olsun.

    2. Eğer result null ise, o zaman

      1. Eğer matchCount = 0 ise, null döndür.

      2. Return array.

    3. matchString, ? ToString(? Get(result, "0")) olsun.

    4. ! CreateDataPropertyOrThrow(array, ! ToString(𝔽(matchCount)), matchString) işlemini gerçekleştir.

    5. Eğer matchString boş Dizgi ise, o zaman

      1. thisIndex, (? ToLength(? Get(regexp, "lastIndex"))) olsun.

      2. nextIndex, AdvanceStringIndex(string, thisIndex, fullUnicode) olsun.

      3. ? Set(regexp, "lastIndex", 𝔽(nextIndex), true) işlemini gerçekleştir.

    6. matchCount değerini matchCount + 1 olarak ayarla.

Bu metodun "name" özelliğinin değeri "[Symbol.match]"'tir.

22.2.6.9 RegExp.prototype [ %Symbol.matchAll% ] ( string )

Bu metot çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. regexp, this değeri olsun.

  2. Eğer regexp bir Nesne değilse (is not an Object), bir TypeError istisnası fırlatır.

  3. string değerini ? ToString(string) olarak ayarla.

  4. speciesCtor, ? SpeciesConstructor(regexp, %RegExp%) olsun.

  5. flags, ? ToString(? Get(regexp, "flags")) olsun.

  6. matcher, ? Construct(speciesCtor, « regexp, flags ») olsun.

  7. lastIndex, ? ToLength(? Get(regexp, "lastIndex")) olsun.

  8. ? Set(matcher, "lastIndex", lastIndex, true) işlemini gerçekleştir.

  9. Eğer flags "g" içeriyorsa, global true olsun.

  10. Else, let global be false.

  11. Eğer flags "u" veya flags "v" içeriyorsa, fullUnicode true olsun.

  12. Else, let fullUnicode be false.

  13. Return CreateRegExpStringIterator(matcher, string, global, fullUnicode).

The value of the "name" property of this method is "[Symbol.matchAll]" cleanser.

22.2.6.10 get RegExp.prototype.multiline

RegExp.prototype.multiline bir erişici özelliğidir (accessor property) ve küme erişici (set accessor) fonksiyonu undefined'dır. Getiri erişici (get accessor) fonksiyonu çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. regexp, this değeri olsun.

  2. codeUnit, 0x006D (LATIN SMALL LETTER M) kod birimi olsun.

  3. Return ? RegExpHasFlag(regexp, codeUnit).

22.2.6.11 RegExp.prototype [ %Symbol.replace% ] ( string, replaceValue )

Bu metot çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. regexp, this değeri olsun.

  2. Eğer regexp bir Nesne değilse (is not an Object), bir TypeError istisnası fırlatır.

  3. string değerini ? ToString(string) olarak ayarla.

  4. stringLength, string değerinin uzunluğu olsun.

  5. functionalReplace, IsCallable(replaceValue) olsun.

  6. Eğer functionalReplace false ise, o zaman

    1. replaceValue değerini ? ToString(replaceValue) olarak ayarla.
  7. flags, ? ToString(? Get(regexp, "flags")) olsun.

  8. Eğer flags "g" içeriyorsa, global true olsun; aksi takdirde global false olsun.

  9. Eğer global true ise, o zaman

    1. ? Set(regexp, "lastIndex", +0𝔽, true) işlemini gerçekleştir.
  10. results, yeni boş bir Liste (List) olsun.

  11. done, false olsun.

  12. done false olduğu sürece tekrarla,

    1. result, ? RegExpExec(regexp, string) olsun.

    2. Eğer result null ise, o zaman

      1. done değerini true olarak ayarla.
    3. Else,

      1. result değerini results listesine ekle.

      2. Eğer global false ise, o zaman

         1. *done* değerini `true` olarak ayarla.
      3. Else,

         1. *matchString*, ? [ToString](08_sec-abstract-operations.md#sec-tostring)(? [Get](08_sec-abstract-operations.md#sec-get-o-p)(*result*, `"0"`)) olsun.
        
         2. Eğer *matchString* boş Dizgi ise, o zaman
           
                    1. *thisIndex*, [ℝ](06_sec-notational-conventions.md#ℝ)(? [ToLength](08_sec-abstract-operations.md#sec-tolength)(? [Get](08_sec-abstract-operations.md#sec-get-o-p)(*regexp*, `"lastIndex"`))) olsun.
           
                    2. Eğer *flags* `"u"` veya *flags* `"v"` içeriyorsa, *fullUnicode* `true` olsun; aksi takdirde *fullUnicode* `false` olsun.
           
                    3. *nextIndex*, [AdvanceStringIndex](#sec-advancestringindex)(*string*, *thisIndex*, *fullUnicode*) olsun.
           
                    4. ? [Set](08_sec-abstract-operations.md#sec-set-o-p-v-throw)(*regexp*, `"lastIndex"`, [𝔽](06_sec-notational-conventions.md#𝔽)(*nextIndex*), `true`) işlemini gerçekleştir.
  13. accumulatedResult, boş Dizgi olsun.

  14. nextSourcePosition, 0 olsun.

  15. results listesinin her result öğesi için aşağıdakileri yap:

    1. resultLength, ? LengthOfArrayLike(result) olsun.

    2. capturesCount, max(resultLength - 1, 0) olsun.

    3. matched, ? ToString(? Get(result, "0")) olsun.

    4. matchLength, matched uzunluğu olsun.

    5. position, ? ToIntegerOrInfinity(? Get(result, "index")) olsun.

    6. position değerini, position değerinin 0 ile stringLength arasında sınırlandırılmasının (clamping) sonucu olarak ayarla.

    7. captures, yeni boş bir Liste (List) olsun.

    8. captureNumber, 1 olsun.

    9. captureNumbercapturesCount olduğu sürece tekrarla,

      1. capture, ? Get(result, ! ToString(𝔽(captureNumber))) olsun.

      2. Eğer capture undefined değilse, o zaman

         1. *capture* değerini ? [ToString](08_sec-abstract-operations.md#sec-tostring)(*capture*) olarak ayarla.
      3. capture değerini captures listesine ekle.

      4. NOTE: captureNumber = 1 olduğunda, önceki adım captures listesine ilk öğeyi koyar (indeks 0'da). Daha genel olarak, captureNumber. yakalama (yakalayan parantezlerin captureNumber. kümesi tarafından yakalanan karakterler), captures[captureNumber - 1] konumundadır.

      5. captureNumber değerini captureNumber + 1 olarak ayarla.

    10. namedCaptures, ? Get(result, "groups") olsun.

    11. Eğer functionalReplace true ise, o zaman

      1. replacerArgs, « matched », captures ve « 𝔽(position), string » değerlerinin liste birleşimi (list-concatenation) olsun.

      2. Eğer namedCaptures undefined değilse, o zaman

         1. *namedCaptures* değerini *replacerArgs* listesine ekle.
      3. replacementValue, ? Call(replaceValue, undefined, replacerArgs) olsun.

      4. replacementString, ? ToString(replacementValue) olsun.

    12. Else,

      1. If namedCaptures is not undefined, then

         1. Set *namedCaptures* to ? [ToObject](08_sec-abstract-operations.md#sec-toobject)(*namedCaptures*).
      2. replacementString, ? GetSubstitution(matched, string, position, captures, namedCaptures, replaceValue) olsun.

    13. Eğer positionnextSourcePosition ise, o zaman

      1. NOTE: position normalde geriye doğru hareket etmemelidir. Eğer ederse, bu durum RegExp alt sınıfının kötü davrandığına veya regexp nesnesinin global bayrağını ya da diğer özelliklerini değiştirmek için erişimle tetiklenen bir yan etkinin kullanıldığına işaret eder. Bu tür durumlarda ilgili ikame yoksayılır.

      2. accumulatedResult değerini, accumulatedResult, string değerinin nextSourcePosition ile position arasındaki alt dizgisi (substring) ve replacementString değerlerinin dizgi birleşimi (string-concatenation) olarak ayarla.

      3. nextSourcePosition değerini position + matchLength olarak ayarla.

  16. Eğer nextSourcePositionstringLength ise, accumulatedResult döndür.

  17. Return the string-concatenation of accumulatedResult and the substring of string from nextSourcePosition.

The value of the "name" property of this method is "[Symbol.replace]".

Bu metot çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. regexp, this değeri olsun.

  2. Eğer regexp bir Nesne değilse (is not an Object), bir TypeError istisnası fırlatır.

  3. string değerini ? ToString(string) olarak ayarla.

  4. previousLastIndex, ? Get(regexp, "lastIndex") olsun.

  5. Eğer previousLastIndex +0𝔽 değilse, o zaman

    1. ? Set(regexp, "lastIndex", +0𝔽, true) işlemini gerçekleştir.
  6. result, ? RegExpExec(regexp, string) olsun.

  7. currentLastIndex, ? Get(regexp, "lastIndex") olsun.

  8. Eğer SameValue(currentLastIndex, previousLastIndex) false ise, o zaman

    1. ? Set(regexp, "lastIndex", previousLastIndex, true) işlemini gerçekleştir.
  9. Eğer result null ise, -1𝔽 döndür.

  10. Return ? Get(result, "index").

The value of the "name" property of this method is "[Symbol.search]".

22.2.6.13 get RegExp.prototype.source

RegExp.prototype.source bir erişici özelliğidir (accessor property) ve küme erişici (set accessor) fonksiyonu undefined'dır. Getiri erişici (get accessor) fonksiyonu çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. regexp, this değeri olsun.

  2. Eğer regexp bir Nesne değilse (is not an Object), bir TypeError istisnası fırlatır.

  3. Eğer regexp bir [[OriginalSource]] dahili yuvasına sahip değilse, o zaman

    1. Eğer SameValue(regexp, %RegExp.prototype%) true ise, "(?:)" döndür.

    2. Bir TypeError istisnası fırlatır.

  4. Assert: regexp bir [[OriginalFlags]] dahili yuvasına sahiptir.

  5. source, regexp.[[OriginalSource]] olsun.

  6. flags, regexp.[[OriginalFlags]] olsun.

  7. Return EscapeRegExpPattern(source, flags).

22.2.6.13.1 EscapeRegExpPattern ( pattern, flags )

EscapeRegExpPattern soyut işlemi; pattern (bir String) ve flags (bir String) argümanlarını alır ve bir String döndürür. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. Eğer flags "v" içeriyorsa, o zaman

    1. patternSymbol, Pattern[+UnicodeMode, +UnicodeSetsMode] olsun.
  2. Else if flags contains "u", then

    1. Let patternSymbol be Pattern[+UnicodeMode, ~UnicodeSetsMode].
  3. Else,

    1. Let patternSymbol be Pattern[~UnicodeMode, ~UnicodeSetsMode].
  4. escapedPattern, UTF-16 kodlu Unicode kod noktaları (6.1.4) olarak yorumlanan pattern değerine eşdeğer bir patternSymbol biçiminde bir String olsun ve içinde belirli kod noktaları aşağıda açıklandığı gibi kaçış karakterleriyle yazılmış olsun. escapedPattern değeri pattern değerinden farklı olabilir veya olmayabilir; ancak, escapedPattern değerinin bir patternSymbol olarak değerlendirilmesinden elde edilecek olan Soyut Kapanış (Abstract Closure), yapılandırılan nesnenin [[RegExpMatcher]] dahili yuvası tarafından sağlanan Soyut Kapanış (Abstract Closure) ile tamamen aynı davranmalıdır. Bu soyut işlemin, pattern ve flags için aynı değerler kullanılarak yapılan birden çok çağrısı aynı sonuçları üretmelidir.

  5. Şablonda yer alan / kod noktaları veya herhangi bir LineTerminator, "/", escapedPattern, "/" ve flags değerlerinin dizgi birleşiminin (string-concatenation) (uygun bir sözcük bağlamında) yapılandırılan düzenli ifadeyle tamamen aynı davranan bir RegularExpressionLiteral olarak ayrıştırılabilmesini sağlamak için gerektiği şekilde escapedPattern içinde kaçış karakteriyle yazılacaktır. Örneğin, eğer pattern "/" ise, o zaman escapedPattern, diğer olasılıkların yanı sıra "\/" veya "\u002F" olabilir, ancak "/" olamaz, çünkü ardından flags gelen /// ifadesi bir RegularExpressionLiteral yerine bir SingleLineComment olarak ayrıştırılacaktır. Eğer pattern boş Dizgi ise, bu gereksinim escapedPattern değerinin "(?:)" olmasına izin verilerek karşılanabilir.

  6. Return escapedPattern.

22.2.6.14 RegExp.prototype [ %Symbol.split% ] ( string, limit )

Bu metot çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. regexp, this değeri olsun.

  2. Eğer regexp bir Nesne değilse (is not an Object), bir TypeError istisnası fırlatır.

  3. string değerini ? ToString(string) olarak ayarla.

  4. speciesCtor, ? SpeciesConstructor(regexp, %RegExp%) olsun.

  5. flags, ? ToString(? Get(regexp, "flags")) olsun.

  6. Eğer flags "u" veya flags "v" içeriyorsa, unicodeMatching true olsun.

  7. Aksi takdirde, unicodeMatching false olsun.

  8. Eğer flags "y" içeriyorsa, newFlags flags olsun.

  9. Aksi takdirde, newFlags değerini, flags ile "y" değerinin dizgi birleşimi (string-concatenation) olarak ayarla.

  10. splitter, ? Construct(speciesCtor, « regexp, newFlags ») olsun.

  11. array değeri ! ArrayCreate(0) olsun.

  12. lengthA, 0 olsun.

  13. Eğer limit undefined ise, lim değeri 232 - 1 olsun; aksi takdirde lim değeri (? ToUint32(limit)) olsun.

  14. Eğer lim = 0 ise, array döndür.

  15. Eğer string boş String ise, o zaman

    1. matchResult, ? RegExpExec(splitter, string) olsun.

    2. Eğer matchResult null değilse, array döndür.

    3. ! CreateDataPropertyOrThrow(array, "0", string) işlemini gerçekleştir.

    4. array döndür.

  16. size, string değerinin uzunluğu olsun.

  17. lastMatchEnd, 0 olsun.

  18. searchIndex, lastMatchEnd olsun.

  19. searchIndex < size olduğu sürece tekrarla,

    1. ? Set(splitter, "lastIndex", 𝔽(searchIndex), true) işlemini gerçekleştir.

    2. matchResult, ? RegExpExec(splitter, string) olsun.

    3. Eğer matchResult null ise, o zaman

      1. searchIndex değerini AdvanceStringIndex(string, searchIndex, unicodeMatching) olarak ayarla.
    4. Aksi takdirde,

      1. matchEnd, (? ToLength(? Get(splitter, "lastIndex"))) olsun.

      2. matchEnd değerini min(matchEnd, size) olarak ayarla.

      3. Eğer matchEnd = lastMatchEnd ise, o zaman

         1. *searchIndex* değerini [AdvanceStringIndex](#sec-advancestringindex)(*string*, *searchIndex*, *unicodeMatching*) olarak ayarla.
      4. Aksi takdirde,

         1. *substring*, *string* değerinin *lastMatchEnd* ile *searchIndex* arasındaki [alt dizgisi (substring)](07_sec-ecmascript-data-types-and-values.md#substring) olsun.
        
         2. ! [CreateDataPropertyOrThrow](08_sec-abstract-operations.md#sec-createdatapropertyorthrow)(*array*, ! [ToString](08_sec-abstract-operations.md#sec-tostring)([𝔽](06_sec-notational-conventions.md#𝔽)(*lengthA*)), *substring*) işlemini gerçekleştir.
        
         3. *lengthA* değerini *lengthA* + 1 olarak ayarla.
        
         4. Eğer *lengthA* = *lim* ise, *array* döndür.
        
         5. *lastMatchEnd* değerini *matchEnd* olarak ayarla.
        
         6. *numberOfCaptures*, ? [LengthOfArrayLike](08_sec-abstract-operations.md#sec-lengthofarraylike)(*matchResult*) olsun.
        
         7. *numberOfCaptures* değerini [max](06_sec-notational-conventions.md#eqn-max)(*numberOfCaptures* - 1, 0) olarak ayarla.
        
         8. *captureIndex*, 1 olsun.
        
         9. *captureIndex* ≤ *numberOfCaptures* olduğu sürece tekrarla,
           
                    1. *nextCapture*, ? [Get](08_sec-abstract-operations.md#sec-get-o-p)(*matchResult*, ! [ToString](08_sec-abstract-operations.md#sec-tostring)([𝔽](06_sec-notational-conventions.md#𝔽)(*captureIndex*))) olsun.
           
                    2. ! [CreateDataPropertyOrThrow](08_sec-abstract-operations.md#sec-createdatapropertyorthrow)(*array*, ! [ToString](08_sec-abstract-operations.md#sec-tostring)([𝔽](06_sec-notational-conventions.md#𝔽)(*lengthA*)), *nextCapture*) işlemini gerçekleştir.
           
                    3. *captureIndex* değerini *captureIndex* + 1 olarak ayarla.
           
                    4. *lengthA* değerini *lengthA* + 1 olarak ayarla.
           
                    5. Eğer *lengthA* = *lim* ise, *array* döndür.
        
         10. *searchIndex* değerini *lastMatchEnd* olarak ayarla.
  20. substring, string değerinin lastMatchEnd ile size arasındaki alt dizgisi (substring) olsun.

  21. ! CreateDataPropertyOrThrow(array, ! ToString(𝔽(lengthA)), substring) işlemini gerçekleştir.

  22. array döndür.

Bu metodun "name" özelliğinin değeri "[Symbol.split]"'tir.

22.2.6.15 get RegExp.prototype.sticky

RegExp.prototype.sticky bir erişici özelliğidir (accessor property) ve küme erişici (set accessor) fonksiyonu undefined'dır. Getiri erişici (get accessor) fonksiyonu çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. regexp, this değeri olsun.

  2. codeUnit, 0x0079 (LATIN SMALL LETTER Y) kod birimi olsun.

  3. Dönüş değeri: ? RegExpHasFlag(regexp, codeUnit).

22.2.6.16 RegExp.prototype.test ( string )

Bu metot çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. regexp, this değeri olsun.

  2. Eğer regexp bir Nesne değilse (is not an Object), bir TypeError istisnası fırlatır.

  3. string değerini ? ToString(string) olarak ayarla.

  4. match, ? RegExpExec(regexp, string) olsun.

  5. Eğer match null ise, false döndür.

  6. true döndür.

22.2.6.17 RegExp.prototype.toString ( )

  1. regexp, this değeri olsun.

  2. Eğer regexp bir Nesne değilse (is not an Object), bir TypeError istisnası fırlatır.

  3. pattern, ? ToString(? Get(regexp, "source")) olsun.

  4. flags, ? ToString(? Get(regexp, "flags")) olsun.

  5. result, "/", pattern, "/" ve flags değerlerinin dizgi birleşimi (string-concatenation) olsun.

  6. result döndür.

22.2.6.18 get RegExp.prototype.unicode

RegExp.prototype.unicode bir erişici özelliğidir (accessor property) ve küme erişici (set accessor) fonksiyonu undefined'dır. Getiri erişici (get accessor) fonksiyonu çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. regexp, this değeri olsun.

  2. codeUnit, 0x0075 (LATIN SMALL LETTER U) kod birimi olsun.

  3. Dönüş değeri: ? RegExpHasFlag(regexp, codeUnit).

22.2.6.19 get RegExp.prototype.unicodeSets

RegExp.prototype.unicodeSets bir erişici özelliğidir (accessor property) ve küme erişici (set accessor) fonksiyonu undefined'dır. Getiri erişici (get accessor) fonksiyonu çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. regexp, this değeri olsun.

  2. codeUnit, 0x0076 (LATIN SMALL LETTER V) kod birimi olsun.

  3. Dönüş değeri: ? RegExpHasFlag(regexp, codeUnit).

22.2.7 RegExp Eşleşmesi İçin Soyut İşlemler (Abstract Operations for RegExp Matching)

22.2.7.1 RegExpExec ( regexp, string )

RegExpExec soyut işlemi; regexp (bir Nesne) ve string (bir String) argümanlarını alır ve ya bir Nesne ya da null içeren bir olağan tamamlanma (normal completion containing) ya da bir fırlatma tamamlanması (throw completion) döndürür. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. exec, ? Get(regexp, "exec") olsun.

  2. Eğer IsCallable(exec) true ise, o zaman

    1. result, ? Call(exec, regexp, « string ») olsun.

    2. Eğer result bir Nesne değilse (is not an Object) ve result null değilse, bir TypeError istisnası fırlatır.

    3. result döndür.

  3. ? RequireInternalSlot(regexp, [[RegExpMatcher]]) işlemini gerçekleştir.

  4. Dönüş değeri: ? RegExpBuiltinExec(regexp, string).

22.2.7.2 RegExpBuiltinExec ( regexp, string )

RegExpBuiltinExec soyut işlemi; regexp (ilklendirilmiş bir RegExp örneği) ve string (bir String) argümanlarını alır ve ya bir aykırı Dizi nesnesi (Array exotic object) ya da null içeren bir olağan tamamlanma (normal completion containing) ya da bir fırlatma tamamlanması (throw completion) döndürür. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. length, string değerinin uzunluğu olsun.

  2. lastIndex, (? ToLength(! Get(regexp, "lastIndex"))) olsun.

  3. flags, regexp.[[OriginalFlags]] olsun.

  4. Eğer flags "g" içeriyorsa, global true olsun; aksi takdirde global false olsun.

  5. Eğer flags "y" içeriyorsa, sticky true olsun; aksi takdirde sticky false olsun.

  6. Eğer flags "d" içeriyorsa, hasIndices true olsun; aksi takdirde hasIndices false olsun.

  7. Eğer global false ise ve sticky false ise, lastIndex değerini 0 olarak ayarla.

  8. matcher, regexp.[[RegExpMatcher]] olsun.

  9. Eğer flags "u" veya flags "v" içeriyorsa, fullUnicode true olsun; aksi takdirde fullUnicode false olsun.

  10. matchSucceeded, false olsun.

  11. Eğer fullUnicode true ise, input StringToCodePoints(string) olsun; aksi takdirde input, öğeleri string öğesi olan kod birimleri olan bir Liste (List) olsun.

  12. NOTE: input listesinin her bir öğesi bir karakter olarak kabul edilir.

  13. matchSucceeded false olduğu sürece tekrarla,

    1. Eğer lastIndex > length ise, o zaman

      1. Eğer global true ise veya sticky true ise, o zaman

         1. ? [Set](08_sec-abstract-operations.md#sec-set-o-p-v-throw)(*regexp*, `"lastIndex"`, `+0`<sub>𝔽</sub>, `true`) işlemini gerçekleştir.
      2. null döndür.

    2. inputIndex, string değerinin lastIndex öğesinden elde edilen karakterin input içindeki dizini olsun.

    3. result, matcher(input, inputIndex) olsun.

    4. Eğer result failure ise, o zaman

      1. Eğer sticky true ise, o zaman

         1. ? [Set](08_sec-abstract-operations.md#sec-set-o-p-v-throw)(*regexp*, `"lastIndex"`, `+0`<sub>𝔽</sub>, `true`) işlemini gerçekleştir.
        
         2. `null` döndür.
      2. lastIndex değerini AdvanceStringIndex(string, lastIndex, fullUnicode) olarak ayarla.

    5. Aksi takdirde,

      1. Assert: result, bir MatchState değeridir.

      2. matchSucceeded değerini true olarak ayarla.

  14. endIndex, result.[[EndIndex]] olsun.

  15. Eğer fullUnicode true ise, endIndex değerini GetStringIndex(string, endIndex) olarak ayarla.

  16. Eğer global true ise veya sticky true ise, o zaman

    1. ? Set(regexp, "lastIndex", 𝔽(endIndex), true) işlemini gerçekleştir.
  17. capturingGroupsCount, result.[[Captures]] içindeki öğe sayısı olsun.

  18. Assert: capturingGroupsCount = regexp.[[RegExpRecord]].[[CapturingGroupsCount]].

  19. Assert: capturingGroupsCount < 232 - 1.

  20. array, ! ArrayCreate(capturingGroupsCount + 1) olsun.

  21. Assert: array nesnesinin "length" özelliğinin matematiksel değeri (mathematical value of) capturingGroupsCount + 1'dir.

  22. ! CreateDataPropertyOrThrow(array, "index", 𝔽(lastIndex)) işlemini gerçekleştir.

  23. ! CreateDataPropertyOrThrow(array, "input", string) işlemini gerçekleştir.

  24. match, { [[StartIndex]]: lastIndex, [[EndIndex]]: endIndex } Eşleşme Kaydı (Match Record) olsun.

  25. indices, yeni boş bir Liste (List) olsun.

  26. groupNames, yeni boş bir Liste (List) olsun.

  27. match değerini indices listesine ekle.

  28. matchedSubstring, GetMatchString(string, match) olsun.

  29. ! CreateDataPropertyOrThrow(array, "0", matchedSubstring) işlemini gerçekleştir.

  30. Eğer regexp herhangi bir GroupName içeriyorsa, o zaman

    1. groups, OrdinaryObjectCreate(null) olsun.

    2. hasGroups true olsun.

  31. Aksi takdirde,

    1. groups undefined olsun.

    2. hasGroups false olsun.

  32. ! CreateDataPropertyOrThrow(array, "groups", groups) işlemini gerçekleştir.

  33. matchedGroupNames, yeni boş bir Liste (List) olsun.

  34. 1 ≤ icapturingGroupsCount koşulunu sağlayan her i tamsayısı (integer) için, artan sırada, aşağıdakileri yap:

    1. capture, result.[[Captures]] listesinin i. öğesi olsun.

    2. Eğer capture undefined ise, o zaman

      1. capturedValue undefined olsun.

      2. indices listesine undefined ekle.

    3. Aksi takdirde,

      1. captureStart, capture.[[StartIndex]] olsun.

      2. captureEnd, capture.[[EndIndex]] olsun.

      3. Eğer fullUnicode true ise, o zaman

         1. *captureStart* değerini [GetStringIndex](#sec-getstringindex)(*string*, *captureStart*) olarak ayarla.
        
         2. *captureEnd* değerini [GetStringIndex](#sec-getstringindex)(*string*, *captureEnd*) olarak ayarla.
      4. captureRecord, { [[StartIndex]]: captureStart, [[EndIndex]]: captureEnd } Eşleşme Kaydı (Match Record) olsun.

      5. capturedValue, GetMatchString(string, captureRecord) olsun.

      6. captureRecord değerini indices listesine ekle.

    4. ! CreateDataPropertyOrThrow(array, ! ToString(𝔽(i)), capturedValue) işlemini gerçekleştir.

    5. Eğer regexp nesnesinin i. yakalaması bir GroupName ile tanımlanmışsa, o zaman

      1. groupName, bu GroupName'ın CapturingGroupName değeri olsun.

      2. Eğer matchedGroupNames groupName içeriyorsa, o zaman

         1. [Assert](06_sec-notational-conventions.md#assert): *capturedValue* `undefined`'dır.
        
         2. *groupNames* listesine `undefined` ekle.
      3. Aksi takdirde,

         1. Eğer *capturedValue* `undefined` değilse, *groupName* değerini *matchedGroupNames* listesine ekle.
        
         2. [NOTE](06_sec-notational-conventions.md#note-step): Adı *groupName* olan birden fazla grup varsa, *groups* bu noktada zaten bir *groupName* özelliğine sahip olabilir. Ancak, *groups* tüm özellikleri yazılabilir [veri özellikleri (data properties)](07_sec-ecmascript-data-types-and-values.md#sec-object-type) olan bir [sıradan nesne (ordinary object)](07_sec-ecmascript-data-types-and-values.md#ordinary-object) olduğu için, [CreateDataPropertyOrThrow](08_sec-abstract-operations.md#sec-createdatapropertyorthrow) çağrısının başarılı olması yine de garanti edilir.
        
         3. ! [CreateDataPropertyOrThrow](08_sec-abstract-operations.md#sec-createdatapropertyorthrow)(*groups*, *groupName*, *capturedValue*) işlemini gerçekleştir.
        
         4. *groupName* değerini *groupNames* listesine ekle.
    6. Aksi takdirde,

      1. groupNames listesine undefined ekle.
  35. Eğer hasIndices true ise, o zaman

    1. indicesArray, MakeMatchIndicesIndexPairArray(string, indices, groupNames, hasGroups) olsun.

    2. ! CreateDataPropertyOrThrow(array, "indices", indicesArray) işlemini gerçekleştir.

  36. array döndür.

22.2.7.3 AdvanceStringIndex ( string, index, unicode )

AdvanceStringIndex soyut işlemi; string (bir String), index (negatif olmayan bir tamsayı (integer)) ve unicode (bir Boolean) argümanlarını alır ve negatif olmayan bir tamsayı (integer) döndürür. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. Assert: index ≤ 253 - 1.

  2. Eğer unicode false ise, index + 1 döndür.

  3. length, string değerinin uzunluğu olsun.

  4. Eğer index + 1 ≥ length ise, index + 1 döndür.

  5. codePoint, CodePointAt(string, index) olsun.

  6. Dönüş değeri: index + codePoint.[[CodeUnitCount]].

22.2.7.4 GetStringIndex ( string, codePointIndex )

GetStringIndex soyut işlemi; string (bir String) ve codePointIndex (negatif olmayan bir tamsayı (integer)) argümanlarını alır ve negatif olmayan bir tamsayı (integer) döndürür. string değerini, 6.1.4 içinde açıklandığı gibi UTF-16 kodlu kod noktaları dizisi olarak yorumlar ve böyle bir dizin mevcut olduğunda codePointIndex kod noktası dizinine karşılık gelen kod birimi dizinini döndürür. Aksi takdirde string uzunluğunu döndürür. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. Eğer string boş String ise, 0 döndür.

  2. length, string değerinin uzunluğu olsun.

  3. codeUnitCount, 0 olsun.

  4. codePointCount, 0 olsun.

  5. codeUnitCount < length olduğu sürece tekrarla,

    1. Eğer codePointCount = codePointIndex ise, codeUnitCount döndür.

    2. codePoint, CodePointAt(string, codeUnitCount) olsun.

    3. codeUnitCount değerini codeUnitCount + codePoint.[[CodeUnitCount]] olarak ayarla.

    4. codePointCount değerini codePointCount + 1 olarak ayarla.

  6. length döndür.

22.2.7.5 Eşleşme Kayıtları (Match Records)

Bir Eşleşme Kaydı (Match Record), düzenli ifade eşleşmesi veya yakalamasının başlangıç ve bitiş dizinlerini sarmalamak için kullanılan bir Kayıt (Record) değeridir.

Eşleşme Kayıtları, Tablo 67 tablosunda listelenen alanlara sahiptir.

Tablo 67: Eşleşme Kaydı (Match Record) Alanları

Alan Adı Değer Anlamı
[[StartIndex]] negatif olmayan bir tamsayı (integer) Bir dizginin başlangıcından itibaren eşleşmenin başladığı kod birimi sayısı (dahil).
[[EndIndex]] [[StartIndex]] değerine eşit veya büyük bir tamsayı (integer) Bir dizginin başlangıcından itibaren eşleşmenin sona erdiği kod birimi sayısı (hariç).

22.2.7.6 GetMatchString ( string, match )

GetMatchString soyut işlemi; string (bir String) ve match (bir Eşleşme Kaydı (Match Record)) argümanlarını alır ve bir String döndürür. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. Assert: match.[[StartIndex]]match.[[EndIndex]]string uzunluğu.

  2. string değerinin match.[[StartIndex]] ile match.[[EndIndex]] arasındaki alt dizgisini (substring) döndür.

22.2.7.7 GetMatchIndexPair ( string, match )

GetMatchIndexPair soyut işlemi; string (bir String) ve match (bir Eşleşme Kaydı (Match Record)) argümanlarını alır ve bir Array döndürür. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. Assert: match.[[StartIndex]]match.[[EndIndex]]string uzunluğu.

  2. Dönüş değeri: CreateArrayFromList𝔽(match.[[StartIndex]]), 𝔽(match.[[EndIndex]]) »).

22.2.7.8 MakeMatchIndicesIndexPairArray ( string, indices, groupNames, hasGroups )

MakeMatchIndicesIndexPairArray soyut işlemi; string (bir String), indices (ya Eşleşme Kayıtları (Match Records) ya da undefined içeren bir [Liste (List)]), groupNames (ya String ya da undefined içeren bir [Liste (List)]) ve hasGroups (bir Boolean) argümanlarını alır ve bir Array döndürür. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. n, indices içindeki öğe sayısı olsun.

  2. Assert: n < 232 - 1.

  3. Assert: groupNames listesinin n - 1 öğesi vardır.

  4. NOTE: groupNames Listesi (List), indices[1] konumundan başlayarak indices Listesi (List) ile hizalanmış öğeler içerir.

  5. array, ! ArrayCreate(n) olsun.

  6. Eğer hasGroups true ise, o zaman

    1. groups, OrdinaryObjectCreate(null) olsun.
  7. Aksi takdirde,

    1. groups, undefined olsun.
  8. ! CreateDataPropertyOrThrow(array, "groups", groups) işlemini gerçekleştir.

  9. 0 ≤ i < n koşulunu sağlayan her i tamsayısı (integer) için, artan sırada, aşağıdakileri yap:

    1. matchIndices, indices[i] olsun.

    2. Eğer matchIndices undefined değilse, o zaman

      1. matchIndexPair, GetMatchIndexPair(string, matchIndices) olsun.
    3. Aksi takdirde,

      1. matchIndexPair, undefined olsun.
    4. ! CreateDataPropertyOrThrow(array, ! ToString(𝔽(i)), matchIndexPair) işlemini gerçekleştir.

    5. Eğer i > 0 ise, o zaman

      1. name, groupNames[i - 1] olsun.

      2. Eğer name undefined değilse, o zaman

         1. [Assert](06_sec-notational-conventions.md#assert): *groups* `undefined` değildir.
        
         2. [NOTE](06_sec-notational-conventions.md#note-step): Adı *name* olan birden fazla grup varsa, *groups* bu noktada zaten bir *name* özelliğine sahip olabilir. Ancak, *groups* tüm özellikleri yazılabilir [veri özellikleri (data properties)](07_sec-ecmascript-data-types-and-values.md#sec-object-type) olan bir [sıradan nesne (ordinary object)](07_sec-ecmascript-data-types-and-values.md#ordinary-object) olduğu için, [CreateDataPropertyOrThrow](08_sec-abstract-operations.md#sec-createdatapropertyorthrow) çağrısının başarılı olması yine de garanti edilir.
        
         3. ! [CreateDataPropertyOrThrow](08_sec-abstract-operations.md#sec-createdatapropertyorthrow)(*groups*, *name*, *matchIndexPair*) işlemini gerçekleştir.
  10. array döndür.

22.2.8 RegExp Örneklerinin Özellikleri (Properties of RegExp Instances)

RegExp örnekleri, RegExp prototip nesnesinden (RegExp prototype object) özellikleri miras alan sıradan nesnelerdir (ordinary objects). RegExp örnekleri, [[OriginalSource]], [[OriginalFlags]], [[RegExpRecord]] ve [[RegExpMatcher]] dahili yuvalarına sahiptir. [[RegExpMatcher]] dahili yuvasının değeri, RegExp nesnesinin Pattern şablonunun bir Soyut Kapanış (Abstract Closure) temsilidir.

RegExp örnekleri ayrıca aşağıdaki özelliğe sahiptir:

22.2.8.1 lastIndex

"lastIndex" özelliğinin değeri, bir sonraki eşleşmenin başlatılacağı String dizinini belirtir. Kullanıldığında tam sayı olan bir Sayı (integral Number) değerine zorlanır (bkz. 22.2.7.2). Bu özellik, { [[Writable]]: true, [[Enumerable]]: false, [[Configurable]]: false } özniteliklerine sahip olacaktır.

22.2.9 RegExp String Yineleyici Nesneleri (RegExp String Iterator Objects)

Bir RegExp String Yineleyici, belirli bir RegExp örnek nesnesiyle eşleşen, belirli bir String örnek nesnesi üzerindeki belirli bir yinelemeyi temsil eden bir nesnedir. RegExp String Yineleyici nesneleri için adlandırılmış bir yapıcı (constructor) yoktur. Bunun yerine, RegExp String Yineleyici nesneleri, RegExp örnek nesnelerinin belirli metotları çağrılarak oluşturulur.

22.2.9.1 CreateRegExpStringIterator ( regexp, string, global, fullUnicode )

CreateRegExpStringIterator soyut işlemi; regexp (bir Nesne), string (bir String), global (bir Boolean) ve fullUnicode (bir Boolean) argümanlarını alır ve bir Nesne döndürür. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. iterator, OrdinaryObjectCreate(%RegExpStringIteratorPrototype%, « [[IteratingRegExp]], [[IteratedString]], [[Global]], [[Unicode]], [[Done]] ») olsun.

  2. iterator.[[IteratingRegExp]] değerini regexp olarak ayarla.

  3. iterator.[[IteratedString]] değerini string olarak ayarla.

  4. iterator.[[Global]] değerini global olarak ayarla.

  5. iterator.[[Unicode]] değerini fullUnicode olarak ayarla.

  6. iterator.[[Done]] değerini false olarak ayarla.

  7. iterator döndür.

22.2.9.2 %RegExpStringIteratorPrototype% Nesnesi (The %RegExpStringIteratorPrototype% Object)

%RegExpStringIteratorPrototype% nesnesi:

22.2.9.2.1 %RegExpStringIteratorPrototype%.next ( )
  1. iteratorObj, this değeri olsun.

  2. Eğer iteratorObj bir Nesne değilse (is not an Object), bir TypeError istisnası fırlatır.

  3. Eğer iteratorObj, bir [RegExp String Yineleyici (#sec-regexp-string-iterator-objects) Nesne Örneğinin tüm dahili yuvalarına sahip değilse (bkz. 22.2.9.3), bir TypeError istisnası fırlatır.

  4. Eğer iteratorObj.[[Done]] true ise, o zaman

    1. Dönüş değeri: CreateIteratorResultObject(undefined, true).
  5. regexp, iteratorObj.[[IteratingRegExp]] olsun.

  6. string, iteratorObj.[[IteratedString]] olsun.

  7. global, iteratorObj.[[Global]] olsun.

  8. fullUnicode, iteratorObj.[[Unicode]] olsun.

  9. match, ? RegExpExec(regexp, string) olsun.

  10. Eğer match null ise, o zaman

    1. iteratorObj.[[Done]] değerini true olarak ayarla.

    2. Dönüş değeri: CreateIteratorResultObject(undefined, true).

  11. Eğer global false ise, o zaman

    1. iteratorObj.[[Done]] değerini true olarak ayarla.

    2. Dönüş değeri: CreateIteratorResultObject(match, false).

  12. matchString, ? ToString(? Get(match, "0")) olsun.

  13. Eğer matchString boş Dizgi ise, o zaman

    1. thisIndex, (? ToLength(? Get(regexp, "lastIndex"))) olsun.

    2. nextIndex, AdvanceStringIndex(string, thisIndex, fullUnicode) olsun.

    3. ? Set(regexp, "lastIndex", 𝔽(nextIndex), true) işlemini gerçekleştir.

  14. Dönüş değeri: CreateIteratorResultObject(match, false).

22.2.9.2.2 %RegExpStringIteratorPrototype% [ %Symbol.toStringTag% ]

%Symbol.toStringTag% özelliğinin ilk değeri "RegExp String Iterator" String değeridir.

Bu özellik, { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: true } özniteliklerine sahiptir.

22.2.9.3 RegExp String Yineleyici Örneklerinin Özellikleri (Properties of RegExp String Iterator Instances)

RegExp String Yineleyici (RegExp String Iterator) örnekleri, %RegExpStringIteratorPrototype% içsel (intrinsic) nesnesinden özellikleri miras alan sıradan nesnelerdir (ordinary objects). RegExp String Yineleyici (RegExp String Iterator) örnekleri başlangıçta Tablo 68 tablosunda listelenen dahili yuvalarla oluşturulur.

Tablo 68: RegExp String Yineleyici (RegExp String Iterator) Örneklerinin Dahili Yuvaları

Dahili Yuva Tür Açıklama
[[IteratingRegExp]] bir Nesne Yineleme için kullanılan düzenli ifade. IsRegExp([[IteratingRegExp]]) başlangıçta true'dur.
[[IteratedString]] bir String Üzerinde yineleme yapılan String değeri.
[[Global]] bir Boolean [[IteratingRegExp]] düzenli ifadesinin global olup olmadığını gösterir.
[[Unicode]] bir Boolean [[IteratingRegExp]] düzenli ifadesinin Unicode modunda olup olmadığını gösterir.
[[Done]] bir Boolean Yinelemenin tamamlanıp tamamlanmadığını gösterir.