Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

148
Views
¿Por qué es "asdf".replace(/.*/g, "x") == "xx"?

Me topé con un hecho sorprendente (para mí).

 console.log("asdf".replace(/.*/g, "x"));

¿Por qué dos reemplazos? Parece que cualquier cadena no vacía sin líneas nuevas producirá exactamente dos reemplazos para este patrón. Usando una función de reemplazo, puedo ver que el primer reemplazo es para toda la cadena y el segundo es para una cadena vacía.

over 4 years ago · Santiago Trujillo
2 answers
Answer question

0

Según el estándar ECMA-262 , String.prototype.replace llama a RegExp.prototype[@@replace] , que dice:

 11. Repeat, while done is false a. Let result be ? RegExpExec(rx, S). b. If result is null, set done to true. c. Else result is not null, i. Append result to the end of results. ii. If global is false, set done to true. iii. Else, 1. Let matchStr be ? ToString(? Get(result, "0")). 2. If matchStr is the empty String, then a. Let thisIndex be ? ToLength(? Get(rx, "lastIndex")). b. Let nextIndex be AdvanceStringIndex(S, thisIndex, fullUnicode). c. Perform ? Set(rx, "lastIndex", nextIndex, true).

donde rx es /.*/g y S es 'asdf' .

Ver 11.c.iii.2.b:

B. Deje que nextIndex sea AdvanceStringIndex(S, thisIndex, fullUnicode).

Por lo tanto, en 'asdf'.replace(/.*/g, 'x') en realidad es:

  1. resultado (indefinido), resultados = [] , lastIndex = 0
  2. resultado = 'asdf' , resultados = [ 'asdf' ] , lastIndex = 4
  3. resultado = '' , resultados = [ 'asdf', '' ] , lastIndex = 4 , AdvanceStringIndex , establezca lastIndex en 5
  4. resultado = null , resultados = [ 'asdf', '' ] , retorno

Por lo tanto hay 2 coincidencias.

over 4 years ago · Santiago Trujillo Report

0

La primera coincidencia es obviamente "asdf" (Posición [0,4]). Debido a que la bandera global ( g ) está establecida, continúa buscando. En este punto (Posición 4), encuentra una segunda coincidencia, una cadena vacía (Posición [4,4]).

Recuerda que * coincide con cero o más elementos.

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!