Eu tenho uma string:
var string = "aaaaaa<br />† bbbb<br />‡ cccc"
E eu gostaria de dividir essa string com o delimitador <br />
seguido por um caractere especial.
Para fazer isso, eu estou usando isso:
string.split(/<br \/>&#?[a-zA-Z0-9]+;/g);
Estou conseguindo o que preciso, exceto que estou perdendo o delimitador. Aqui está o exemplo: http://jsfiddle.net/JwrZ6/1/
Como posso manter o delimitador?
javascript
regex
Miloš
fonte
fonte
var delim = "<br/>";
?Respostas:
Use lookahead (positivo) para que a expressão regular afirme que o caractere especial existe, mas na verdade não corresponde a ele:
Veja em ação:
fonte
0
no final de cada stringEu estava tendo um problema semelhante, mas um pouco diferente. De qualquer forma, aqui estão exemplos de três cenários diferentes para onde manter o deliminador.
Aviso: O quarto só funcionará para dividir caracteres únicos. ConnorsFan apresenta uma alternativa :
fonte
g
do final.match
solução não gananciosa para estes exemplos:"11、22、33".match(/.*?、|.+$/g)
->["11、", "22、", "33"]
. O/g
modificador de nota é crucial para a correspondência.Se você colocar o delimitador entre parênteses, ele fará parte da matriz retornada.
Dependendo de qual parte você deseja manter, altere qual subgrupo você corresponde
Você pode melhorar a expressão ignorando o caso das letras string.split (/ () & #? [A-z0-9] +; / gi);
E você pode corresponder a grupos predefinidos como este:
\d
iguais[0-9]
e\w
iguais[a-zA-Z0-9_]
. Isso significa que sua expressão pode ficar assim.Há uma boa referência de expressão regular no JavaScriptKit .
fonte
respondeu aqui também JavaScript Split Regular Expression keep the delimiter
use o padrão lookahead (? = pattern) no exemplo regex
isso lhe dará o seguinte resultado.
Também pode ser dividido diretamente
dando o mesmo resultado
fonte
Uma função de extensão divide a string com substring ou RegEx e o delimitador é colocado de acordo com o segundo parâmetro à frente ou atrás.
O teste:
fonte
Fiz uma modificação na resposta de jichi e a coloquei em uma função que também suporta várias letras.
As respostas de jichi O terceiro método não funcionaria nessa função, então eu peguei o quarto método e removi os espaços vazios para obter o mesmo resultado.
edit: segundo método que excede uma matriz para dividir char1 ou char2
uso:
fonte
Eu tenho usado isso:
Exceto que você não deve mexer
String.prototype
, então aqui está uma versão da função:Então você poderia fazer:
E você vai acabar com:
fonte