/ Forside / Teknologi / Udvikling / Java Scripts / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Java Scripts
#NavnPoint
molokyle 5410
Klaudi 2799
smorch 2439
kim 1360
Harlekin 1134
bentjuul 984
gibson 800
severino 695
Random 675
10  konsulent.. 626
Tælle antal '.' i streng
Fra : Denn!s H


Dato : 07-02-04 14:45

Hej

Er der en kommando i JavaScript til at tælle antallet af en bestemt
karakter, f.eks. punktum i en streng?

--
mvh
Denn!s



 
 
Lasse Reichstein Nie~ (07-02-2004)
Kommentar
Fra : Lasse Reichstein Nie~


Dato : 07-02-04 15:50

"Denn!s H" <@> writes:

> Er der en kommando i JavaScript til at tælle antallet af en bestemt
> karakter, f.eks. punktum i en streng?

Ikke direkte, men det kan klares:
En lidt usikker version er:
---
function antal(str,chr) {
return str.replace(RegExp("[^"+chr+"]","g"),"").length;
}
---
Den er usikker fordi der er tegn den ikke virker med fordi de betyder
noget i regulære udtryk.

En langsommere, men sikrere, metode kunne være:
---
function antal(str,chr) {
var num=0;
for(var i=0;i<str.length;i++) {
if (str.charAt(i)==chr) {num++;}
}
return num;
}
---
eller
---
function antal(str,chr) {
var num=0;
for (var i=0;(i=str.indexOf(chr,i))!=-1;i++) {
num++;
}
return num;
}
---

Held og lykke
/L
--
Lasse Reichstein Nielsen - lrn@hotpop.com
DHTML Death Colors: <URL:http://www.infimum.dk/HTML/rasterTriangleDOM.html>
'Faith without judgement merely degrades the spirit divine.'

Denn!s H (07-02-2004)
Kommentar
Fra : Denn!s H


Dato : 07-02-04 16:37

"Lasse Reichstein Nielsen" <lrn@hotpop.com> skrev i en meddelelse
news:llnfyme9.fsf@hotpop.com...
> Ikke direkte, men det kan klares:
> En lidt usikker version er:
> ---
> function antal(str,chr) {
> return str.replace(RegExp("[^"+chr+"]","g"),"").length;
> }
> ---
> Den er usikker fordi der er tegn den ikke virker med fordi de betyder
> noget i regulære udtryk.

Hej Lasse, tak for dine svar.

strDom.replace(RegExp("[^\.]","g"),"").length > 3)
endte det med, og det virker fint til formålet.

Meget brugbare eksempler du gav, jeg sad og ledte i næsten i time inden jeg
gav op.
Jeg kunne bare ikke finde noget der kunne hjælpe mig i gang.
Men jeg ledte slet heller ikke efter replace sammen med en RegExp.

--
Hilsen
Denn!s



Lasse Reichstein Nie~ (07-02-2004)
Kommentar
Fra : Lasse Reichstein Nie~


Dato : 07-02-04 17:31

"Denn!s H" <@> writes:

> strDom.replace(RegExp("[^\.]","g"),"").length > 3)
> endte det med, og det virker fint til formålet.

Backslashen er ikke nødvendig, og gør faktisk slet ikke noget for
RegExp'en. Den bliver fjernet allerede når strengen bliver parset,
fordi "\." i en streng er det samme som bare ".". Hvis man vil have en
backslash med over i RegExp'en der bliver lavet af RegExp-funktionen,
så skal man skrive "\\" i streng-literal'en (fordi det bliver til en
backslash i streng-værdien).

Den lidt kortere version er
strDom.replace(/[^.]+/g,"").length > 3
Det kan betale sige, tidsmæssigt, at sætte "+" efter, så den fjerne mere
end et ikke-punktum ad gangen. I praksis gør det nok ikke så meget.

/L
--
Lasse Reichstein Nielsen - lrn@hotpop.com
DHTML Death Colors: <URL:http://www.infimum.dk/HTML/rasterTriangleDOM.html>
'Faith without judgement merely degrades the spirit divine.'

Kim Emax (07-02-2004)
Kommentar
Fra : Kim Emax


Dato : 07-02-04 18:35

Lasse Reichstein Nielsen wrote:

> Backslashen er ikke nødvendig, og gør faktisk slet ikke noget for
> RegExp'en. Den bliver fjernet allerede når strengen bliver parset,
> fordi "\." i en streng er det samme som bare ".".

Det er ikke korrekt, med mindre JS opfører sig unormalt i forhold til andre
sprog. \. betyder netop at man escaper betydning af . (hvilket som helst
tegn) og kun matcher på tegnet .

> Hvis man vil have en
> backslash med over i RegExp'en der bliver lavet af RegExp-funktionen,
> så skal man skrive "\\" i streng-literal'en (fordi det bliver til en
> backslash i streng-værdien).

nemli, du escaper betydningen af \ (udkommenter speciel funktionen for det
pågældende tegn)

> Den lidt kortere version er
> strDom.replace(/[^.]+/g,"").length > 3

Det er helt hen i vejret at bruge en replace på en funktion, der skal
tjekke, hvor mange tegn der er i en streng.

--
Kim Emax - master|minds - Vi tænker IT for dig...
http://www.masterminds.dk - http://www.emax.dk



Lasse Reichstein Nie~ (07-02-2004)
Kommentar
Fra : Lasse Reichstein Nie~


Dato : 07-02-04 20:20

"Kim Emax" <newsgroup@remove-emax.dk> writes:

> Lasse Reichstein Nielsen wrote:
>
>> Backslashen er ikke nødvendig, og gør faktisk slet ikke noget for
>> RegExp'en. Den bliver fjernet allerede når strengen bliver parset,
>> fordi "\." i en streng er det samme som bare ".".
>
> Det er ikke korrekt, med mindre JS opfører sig unormalt i forhold til andre
> sprog. \. betyder netop at man escaper betydning af . (hvilket som helst
> tegn) og kun matcher på tegnet .

Det ville være rigtigt hvis man skrev
/example\.com/
altså som del af en RegExp-literal. Det er ikke det der sker her.

Her laves det regulære udtryk vha. funktionen RegExp, som tager en
*streng* som argument.
Hvis man skriver
RegExp("example\.com")
så vil Javascript først fortolke string-literal'en "example\.com".
Da "\." ikke betyder noget specelt, bliver det blot til streng-værdien
"example.com". Den streng sendes til RegExp, som laver et RegExp-objekt
der svarer til de man ville få fra /example.com/.

Hvis man ønsker at lave det samme som /example\.com/ via RegExp, så skal
man skrive
RegExp("example\\.com")
Det vil give en en streng-værdi der indeholder en backslash.

(I det oprindelige eksempel stod "." mellem "[" og "]", hvor punktum
ikke betyder noget specielt, så der var ingen brug for backslashen
alligevel).

>> Den lidt kortere version er
>> strDom.replace(/[^.]+/g,"").length > 3
>
> Det er helt hen i vejret at bruge en replace på en funktion, der skal
> tjekke, hvor mange tegn der er i en streng.

Fjern resten, tjek hvor mange der er tilbage. Lige ud af landevejen :)

Ok, det er måske lidt overkill, men jeg kunne være meget værre :)
Hvis jeg skulle bruge RegExps, så er denne nok lidt pænere:
---
function antalDot(strDom) {
var re = /\./g;
var num = 0;
while(re.exec(strDom)) {
num++;
}
return num;
}
---
Ellers ville jeg bruge indexOf-varianten. Hvor meget jeg ville gøre ud
af det afhænger selvfølgelig også af hvor lang strengen forventes at
være.


/L
--
Lasse Reichstein Nielsen - lrn@hotpop.com
DHTML Death Colors: <URL:http://www.infimum.dk/HTML/rasterTriangleDOM.html>
'Faith without judgement merely degrades the spirit divine.'

Kim Emax (07-02-2004)
Kommentar
Fra : Kim Emax


Dato : 07-02-04 16:34

Denn!s H wrote:

> Er der en kommando i JavaScript til at tælle antallet af en bestemt
> karakter, f.eks. punktum i en streng?

length?

function strlen(str) {
return str.length;
}

--
Kim Emax - master|minds - Vi tænker IT for dig...
http://www.masterminds.dk - http://www.emax.dk



Søg
Reklame
Statistik
Spørgsmål : 177559
Tips : 31968
Nyheder : 719565
Indlæg : 6408938
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste