La coincidencia de JavaScript regex falla en la página real, pero las pruebas de expresiones regulares funcionan bien

Tengo un problema muy específico relacionado con una expresión regular que coincida en Javascript. Estoy tratando de hacer coincidir una parte del código fuente, más específicamente una porción aquí:

World Boards | Olympa - Trade | Bump when Yasir... 

La parte que trato de hacer es boardid=106121">Olympa - Trade , la parte que realmente necesito es” Olympa “. Entonces uso la siguiente línea de código JS para obtener una coincidencia y tengo” Olympa ” devuelto:

 var world = document.documentElement.innerHTML.match('/boardid=[0-9]+">([AZ][az]+)( - Trade){0,1}/i')[1]; 

la parte ( - Trade) es opcional en mi problema, de ahí el {0,1} en la expresión regular.

Tampoco hay una manera más fácil de reducir el código, por ejemplo, getElementsByTagName, por lo que la búsqueda del código fuente completo es mi única opción.

Ahora aquí está lo gracioso. Utilicé dos correlaciones de expresiones regulares en línea (una de las cuales fue específicamente para JS-regex) para probar mi expresión regular frente al código fuente completo. Ambas veces, tuvo una coincidencia y devolvió “Olympa” exactamente como debería. Sin embargo, cuando incluyo Chrome en la secuencia de comandos de la página real, aparece el siguiente error:

 Error in event handler for 'undefined': Cannot read property '1' of null TypeError: Cannot read property '1' of null 

Obviamente, la primera parte de mi línea devuelve “nulo” porque no encuentra una coincidencia, y tomar [1] de “nulo” no funciona.

Pensé que no estaría haciendo la coincidencia en el código fuente, pero cuando dejé que el script produjera document.documentElement.innerHTML en la consola, se emite el código fuente completo.

No veo ninguna razón por la cual esta expresión regular falla, así que debo estar pasando por alto algo muy tonto. ¿Alguien más ve el problema?

Toda ayuda apreciada, Kenneth

Estás poniendo tu expresión regular dentro de una cadena. No debería estar dentro de una cuerda.

 var world = document.documentElement.innerHTML.match(/boardid=[0-9]+">([AZ][az]+)( - Trade){0,1}< \/a>/i)[1]; 

Otra cosa: parece que tienes un objeto de documento , en cuyo caso todo este HTML ya está analizado para ti, y puedes aprovecharlo en lugar de reinventar una rueda frágil.

 var element = document.querySelector('a[href*="boardid="]'); var world = element.textContent; 

(Esto supone que no necesita soporte < = IE8. Si lo hace, aún queda una mejor manera).

(PS ? Es una abreviatura de {0,1} .)