javascript - regulares - Regex para reemplazar mĂșltiples espacios con un solo espacio
javascript regex test (21)
Aquí hay una solución alternativa si no desea usar reemplazar (reemplazar espacios en una cadena sin usar reemplazar javascript)
var str="The dog has a long tail, and it is RED!";
var rule=//s{1,}/g;
str = str.split(rule).join(" ");
document.write(str);
Dada una cadena como:
"The dog has a long tail, and it is RED!"
¿Qué tipo de magia jQuery o JavaScript se puede usar para mantener los espacios a solo un espacio máximo?
Gol:
"The dog has a long tail, and it is RED!"
Como parece que estás interesado en el rendimiento, los describí con firebug. Aquí están los resultados que obtuve:
str.replace( / +/g, '' '' ) -> 790ms
str.replace( / +/g, '' '' ) -> 380ms
str.replace( / {2,}/g, '' '' ) -> 470ms
str.replace( //s/s+/g, '' '' ) -> 390ms
str.replace( / +(?= )/g, '' '') -> 3250ms
Esto está en Firefox, ejecutando reemplazos de cadena de 100k.
Le animo a hacer sus propias pruebas de perfilado con firebug, si cree que el rendimiento es un problema. Los seres humanos son notoriamente malos para predecir dónde se encuentran los cuellos de botella en sus programas.
(Además, tenga en cuenta que la barra de herramientas para desarrolladores de IE 8 también tiene un generador de perfiles integrado; podría valer la pena comprobar cómo es el rendimiento en IE).
Dado que también desea cubrir pestañas, nuevas líneas, etc., simplemente reemplace /s/s+
con '' ''
:
string = string.replace(//s/s+/g, '' '');
Si realmente desea cubrir solo espacios (y, por lo tanto, no pestañas, nuevas líneas, etc.), hágalo:
string = string.replace(/ +/g, '' '');
Esta es una solución, aunque se enfocará en todos los caracteres del espacio:
"The dog has a long tail, and it is RED!".replace(//s/s+/g, '' '')
"The dog has a long tail, and it is RED!"
Edición : Probablemente sea mejor, ya que se dirige a un espacio seguido de 1 o más espacios:
"The dog has a long tail, and it is RED!".replace(/ +/g, '' '')
"The dog has a long tail, and it is RED!"
Método alternativo:
"The dog has a long tail, and it is RED!".replace(/ {2,}/g, '' '')
"The dog has a long tail, and it is RED!"
No usé //s+/
por sí mismo, ya que reemplaza los espacios que abarcan 1 carácter varias veces y puede ser menos eficiente, ya que se enfoca más de lo necesario.
No probé profundamente ninguno de estos, así que si hay errores.
Además, si va a realizar el reemplazo de cadenas, recuerde volver a asignar la variable / propiedad a su propio reemplazo, por ejemplo:
var string = ''foo''
string = string.replace(''foo'', '''')
Utilizando jQuery.prototype.text:
var el = $(''span:eq(0)'');
el.text( el.text().replace(//d+/, '''') )
Esta secuencia de comandos elimina cualquier espacio en blanco (espacios múltiples, tabulaciones, retornos, etc.) entre palabras y recortes:
// Trims & replaces any wihtespacing to single space between words
String.prototype.clearExtraSpace = function(){
var _trimLeft = /^/s+/,
_trimRight = //s+$/,
_multiple = //s+/g;
return this.replace(_trimLeft, '''').replace(_trimRight, '''').replace(_multiple, '' '');
};
Intenta esto para reemplazar múltiples espacios con un solo espacio.
<script type="text/javascript">
var myStr = "The dog has a long tail, and it is RED!";
alert(myStr); // Output ''The dog has a long tail, and it is RED!''
var newStr = myStr.replace(/ +/g, '' '');
alert(newStr); // Output ''The dog has a long tail, and it is RED!''
</script>
Jquery tiene la función trim () que básicamente convierte algo así como "FOo Bar" en "FOo Bar".
var string = " My String with Multiple lines ";
string.trim(); // output "My String with Multiple lines"
Es mucho más útil porque elimina automáticamente los espacios vacíos al principio y al final de la cadena también. No se necesita expresión regular.
Más robusto:
function trim(word) { word = word.replace(/[^/x21-/x7E]+/g, '' ''); // change non-printing chars to spaces return word.replace(/^/s+|/s+$/g, ''''); // remove leading/trailing spaces }
Para obtener más control, puede utilizar la devolución de llamada de reemplazo para manejar el valor.
value = "tags:HUNT tags:HUNT tags:HUNT tags:HUNT"
value.replace(new RegExp(`(?://s+)(?:tags)`, ''g''), $1 => ` ${$1.trim()}`)
//"tags:HUNT tags:HUNT tags:HUNT tags:HUNT"
Podemos usar las siguientes expresiones regulares explicadas con la ayuda del comando sed system. La expresión regular similar se puede utilizar en otros idiomas y plataformas.
Agregue el texto en algún archivo diga prueba
manjeet-laptop:Desktop manjeet$ cat test
"The dog has a long tail, and it is RED!"
Podemos usar la siguiente expresión regular para reemplazar todos los espacios en blanco con un solo espacio
manjeet-laptop:Desktop manjeet$ sed ''s/ /{1,/}/ /g'' test
"The dog has a long tail, and it is RED!"
Espero que esto sirva para el propósito
Sé que llego tarde a la fiesta, pero descubrí una buena solución.
Aquí está:
var myStr = myStr.replace(/[ ][ ]*/g, '' '');
También una posibilidad:
str.replace( //s+/g, '' '' )
Tengo este método, lo llamo el método Derp por falta de un nombre mejor.
while (str.indexOf(" ") !== -1) {
str = str.replace(/ /g, " ");
}
Un método más robusto: Esto también se encarga de eliminar los espacios iniciales y finales, si existen. P.ej:
// NOTE the possible initial and trailing spaces
var str = " The dog has a long tail, and it is RED! "
str = str.replace(/^/s+|/s+$|/s+(?=/s)/g, "");
// str -> "The dog has a long tail, and it is RED !"
Su ejemplo no tenía esos espacios, pero también son un escenario muy común, y la respuesta aceptada fue solo recortarlos en espacios individuales, como: "¡El ... ROJO!", Que no es lo que normalmente necesitará.
no se utiliza reemplazar, string = string.split (/ / W + /);
yo sugiero
string = string.replace(/ +/g," ");
para espacios justos
O
string = string.replace(/(/s)+/g,"$1");
para convertir múltiples rendimientos en un solo retorno también.
Respuesta integral no encriptada para novatos y otros.
Esto es para todos los tontos como yo que prueban los guiones escritos por algunos de ustedes que no funcionan.
Los siguientes 3 ejemplos son los pasos que tomé para eliminar caracteres especiales Y espacios adicionales en los siguientes 3 sitios web (todos los cuales funcionan perfectamente) {1. EtaVisa.com 2. EtaStatus.com 3. Tikun.com}, así que sé que funcionan perfectamente.
Los hemos encadenado con más de 50 a la vez y NO hay problemas.
// Esto eliminó los caracteres especiales + 0-9 y permite solo letras (mayúsculas y mayúsculas)
function NoDoublesPls1()
{
var str=document.getElementById("NoDoubles1");
var regex=/[^a-z]/gi;
str.value=str.value.replace(regex ,"");
}
// Esto eliminó los caracteres especiales y permite solo letras (mayúsculas y minúsculas) y espacios 0-9 Y
function NoDoublesPls2()
{
var str=document.getElementById("NoDoubles2");
var regex=/[^a-z 0-9]/gi;
str.value=str.value.replace(regex ,"");
}
// Esto eliminó los caracteres especiales y permite solo letras (mayúsculas y minúsculas) y 0-9 Y espacios // El .replace (/ / s / s + / g, "") al final elimina los espacios excesivos // cuando I utiliza comillas simples, no funcionó.
function NoDoublesPls3()
{ var str=document.getElementById("NoDoubles3");
var regex=/[^a-z 0-9]/gi;
str.value=str.value.replace(regex ,"") .replace(//s/s+/g, " ");
}
:: SIGUIENTE :: Guardar # 3 como a .js
// Llamé al mío NoDoubles.js
:: SIGUIENTE :: Incluye tu JS en tu página
<script language="JavaScript" src="js/NoDoubles.js"></script>
Incluya esto en su campo de formulario :: como
<INPUT type="text" name="Name"
onKeyUp="NoDoublesPls3()" onKeyDown="NoDoublesPls3()" id="NoDoubles3"/>
Para que se vea así
<INPUT type="text" name="Name" onKeyUp="NoDoublesPls3()" onKeyDown="NoDoublesPls3()" id="NoDoubles3"/>
Esto eliminará los caracteres especiales, permitirá espacios individuales y eliminará espacios adicionales.
var myregexp = new RegExp(/ {2,}/g);
str = str.replace(myregexp,'' '');
var str = "The dog has a long tail, and it is RED!";
str = str.replace(/ {2,}/g,'' '');
EDITAR: Si desea reemplazar todo tipo de caracteres de espacio en blanco, la forma más eficiente sería así:
str = str.replace(//s{2,}/g,'' '');
var string = "The dog has a long tail, and it is RED!";
var replaced = string.replace(/ +/g, " ");
O si también quieres reemplazar pestañas:
var replaced = string.replace(//s+/g, " ");
var text = `xxx df dfvdfv df
dfv`.split(/[/s,/t,/r,/n]+/).filter(x=>x).join('' '');
resultado:
"xxx df dfvdfv df dfv"