2012-11-28 9 views
9

ho una stringa come di seguito:Javascript Regex per abbinare solo una singola occorrenza né più né meno

single-hyphen 

dobbiamo associare il trattino. Tuttavia, voglio solo abbinare una singola occorrenza del trattino, né più né meno.

Così la stringa precedente restituirà vero, ma i due in basso sarà falso:

1. a-double-hyphen 
2. nohyphen 

Come faccio a definire una regex per fare questo?

Grazie in anticipo.

+0

Quindi è un requisito di avere almeno 1 altro carattere prima e almeno 1 altro carattere dopo il "-"? O no, basta il semplice controllo per esattamente "-" nella stringa? Come sarebbe "-asdf" o "asdf-" essere valido? – Ian

+0

Se è necessario avere un carattere diverso da "-" all'inizio e alla fine, è possibile usare qualcosa di simile a questo: http://jsfiddle.net/NmWTy/1/ - probabilmente non è il più efficiente, e doesn usare la regex, ma è solo un'opzione - ecco perché è un commento, non una risposta. – Ian

+0

@Ian Grazie. Stavo specificatamente cercando una regex che ho trovato di seguito. –

risposta

20

È possibile farlo

/^[^-]+-[^-]+$/ 

^ raffigura l'inizio della stringa

$ raffigura la fine della stringa

[^-]+ partite da 1 a tanti personaggi, tranne -

+0

Perché '[^ -] *?' E non '[^ -] *'? – Dancrumb

+0

@Dancrumb oops..thx per indicarlo – Anirudha

+2

La riluttante corrispondenza non è utile e userei il '+' invece di '*'. Meglio: '^ [^ -] + - [^ -] + $' – Tomalak

3

Strano (e non un Regex) ... ma perché no?

2 === str.split("-").length; 
+1

Lol ... sì, è così che Forrest Gump l'avrebbe fatto. Probabilmente avrei potuto farlo in modo simile a quello che hai ma avevo bisogno di una regex. –

+0

@ChuckUgwuh Bene, in questo caso vorrei fare un'espressione regolare se e solo se è un * requisito *. – VisioN

+0

Sì, era un requisito. Grazie mille per il suggerimento però. Solo scherzando con il riferimento Forrest Gump anche. –

2

Inizio della stringa, qualsiasi numero di non-trattini, trattino, numero di non-trattini, fine stringa.

+0

Le espressioni regolari Java non usano un carattere delimitatore. – Tomalak

+0

@Tomalak: JavaScript non è Java. – Amadan

+0

quelli di Javascript – Dancrumb

2

è possibile utilizzare una combinazione di indexOf e lastIndexOf:

String.prototype.hasOne = function (character) { 
    var first = this.indexOf(character); 
    var last = this.lastIndexOf(character); 

    return first !== -1 && 
     first === last; 
}; 

'single-hyphen'.hasOne('-'); // true 
'a-double-hyphen'.hasOne('-'); // first !== last, false 
'nohyphen'.hasOne('-'); // first === -1, false 

http://jsfiddle.net/cSF8T/

0

non convenzionale, ma funziona. Non manipola la stringa o usa regex.

// only true if only one occurrence of - exists in string 
(str.indexOf("-") + 1) % (str.lastIndexOf("-") + 1) === 0 

Fiddle here

Problemi correlati