# Reglas para la coincidencia de números en Palabras observadas

**URL:** https://meta.discourse.org/t/rules-for-number-matching-in-watched-words/396110
**Category:** Bug
**Tags:** watched-words
**Created:** [14 Febrero, 2026 15:47 UTC](https://meta.discourse.org/t/rules-for-number-matching-in-watched-words/396110 "2026-02-14T15:47:09Z")
**Posts on this page:** 5
**Page:** 1

<div class="post-metadata">

### Author: ![Noble\_Fish](https://avatars.discourse-cdn.com/v4/letter/n/ad7895/32.png) [@Noble\_Fish](https://meta.discourse.org/u/Noble_Fish)
#### Post date: [14 Febrero, 2026 15:47 UTC](https://meta.discourse.org/t/rules-for-number-matching-in-watched-words/396110/1 "2026-02-14T15:47:10Z")

</div>

Como se muestra en la figura siguiente, las palabras coincidentes son “Test”, “123” y “测试” (que significa “Test” en chino simplificado).

 ![image](https://global.discourse-cdn.com/meta/original/4X/e/d/9/ed9c10a585f6fbf0c0ea2d9924a8cacd5ddc7250.png)

Cuando una coincidencia es exitosa, cualquier número que preceda inmediatamente a la palabra que coincide se incluirá en el resultado de la coincidencia, e incluso esto se aplica a los caracteres Unicode.  
Los números que siguen inmediatamente a la palabra que coincide no muestran este comportamiento;  
Esto también afecta a la coincidencia de números, incluidos los casos en que las cadenas consisten únicamente en letras inglesas y números. Por ejemplo, “Test123” solo puede coincidir con “Test”, pero no puede coincidir con “123” ni con “Test123” (ella misma).

Puede que esté un poco desactualizado: ¿qué tipo de regla de coincidencia es esta? ¿Podría alguien explicármelo? 🫠

---

<div class="post-metadata">

### Author: ![awesomerobot](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/awesomerobot/32/142900_2.png) [@awesomerobot](https://meta.discourse.org/u/awesomerobot)
#### Post date: [20 Febrero, 2026 19:42 UTC](https://meta.discourse.org/t/rules-for-number-matching-in-watched-words/396110/2 "2026-02-20T19:42:10Z")

</div>

Parece un posible error de expresión regular (regex), que siempre son un poco complicadas de desenredar. @zogstrip, tal vez puedas echarle un vistazo, ya que has trabajado en esta área recientemente (aunque esto parece haber existido por un tiempo).

Aquí está mi entendimiento…

Cuando estamos comprobando palabras, hay 3 segmentos que deben coincidir: el inicial, la palabra y el final. Hemos establecido que los segmentos inicial y final sean caracteres no alfabéticos… estos podrían ser puntuación, espacios _O_ números. Los números son lo que está arruinando la coincidencia aquí. La intención es poder detectar palabras incluso si hay puntuación o lo que sea antes/después de la palabra.

Así que la regex ve `123Test`, encuentra `Test`, mira antes y encuentra `3`, y eso coincide como un “no alfabético”, luego mira después y encuentra el final de la palabra. Así que coincide con `3Test`.

Creo que necesitamos comprobar caracteres que no sean letras Y que no sean números en los segmentos inicial/final para evitar esto. No estoy seguro si hay una razón por la que no incluimos los números o si es solo un descuido.

---

<div class="post-metadata">

### Author: ![Noble\_Fish](https://avatars.discourse-cdn.com/v4/letter/n/ad7895/32.png) [@Noble\_Fish](https://meta.discourse.org/u/Noble_Fish)
#### Post date: [20 Febrero, 2026 19:44 UTC](https://meta.discourse.org/t/rules-for-number-matching-in-watched-words/396110/3 "2026-02-20T19:44:27Z")

</div>

¿Quizás este tema debería moverse a la categoría #Contribute > Bug?

---

<div class="post-metadata">

### Author: ![zogstrip](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/zogstrip/32/512781_2.png) [@zogstrip](https://meta.discourse.org/u/zogstrip)
#### Post date: [21 Febrero, 2026 10:54 UTC](https://meta.discourse.org/t/rules-for-number-matching-in-watched-words/396110/5 "2026-02-21T10:54:55Z")

</div>

Esto debería arreglarlo de verdad esta vez. Hemos tenido cierta inconsistencia entre la versión de Ruby y la versión de JS de las expresiones regulares utilizadas, pero eso ya no es necesario.

> <https://github.com/discourse/discourse/pull/37965>
>
> The CJK fix (d7a53ada16) introduced separate boundary patterns for Ruby and JS e…ngines in \`match\_word\_regexp\`. The Ruby engine used \`\[:word:\]\` (which includes digits), while the JS engine used \`\\P{L}\` (non-Letter). Since digits are not letters, the JS pattern treated them as valid word boundaries — causing "123Test" to match as "3Test" and standalone number watched words like "123" to match inside "abc123".
> 
> Replace both engine-specific patterns with a single unified pattern using Unicode property classes (\`\\p{L}\`, \`\\p{M}\`, \`\\p{N}\`, \`\\p{Pc}\`) that work identically in Ruby and JavaScript. This treats letters, marks, numbers, and connector punctuation as word characters in boundary checks, which fixes the number-matching bug for JS consumers while preserving the existing correct behavior on the Ruby side.
> 
> Since \`match\_word\_regexp\` no longer branches on engine, remove the now-dead \`engine:\` parameter from all 5 method signatures that threaded it through (\`match\_word\_regexp\`, \`word\_to\_regexp\`, \`regexps\_for\_action\`, \`compiled\_regexps\_for\_action\`, \`serialized\_regexps\_for\_action\`) and all call sites passing \`engine: :js\` (serializers, pretty\_text).
> 
> https://meta.discourse.org/t/396110
> https://meta.discourse.org/t/396109
> 
> Follow-up to d7a53ada16 (#37844)

---

<div class="post-metadata">

### Author: ![sam](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/sam/32/102149_2.png) [@sam](https://meta.discourse.org/u/sam)
#### Post date: [23 Febrero, 2026 05:35 UTC](https://meta.discourse.org/t/rules-for-number-matching-in-watched-words/396110/6 "2026-02-23T05:35:05Z")

</div>


