18

以下のような文字列があります。

single-hyphen

ハイフンを一致させる必要があります。ただし、ハイフンの 1 回の出現のみに一致させたいと考えています。多かれ少なかれです。

したがって、上記の文字列は true を返しますが、以下の 2 つは false になります。

1. a-double-hyphen
2. nohyphen

これを行うために正規表現を定義するにはどうすればよいですか?

前もって感謝します。

4

5 に答える 5

28

あなたはこれを行うことができます

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

^文字列の開始を示します

$文字列の終わりを示します

[^-]+1を除く多くの文字に一致します-

于 2012-11-28T14:09:25.020 に答える
6
/^[^-]*-[^-]*$/

文字列の始まり、任意の数の非ハイフン、ハイフン、任意の数の非ハイフン、文字列の終わり。

于 2012-11-28T14:09:53.710 に答える
3

奇妙です(正規表現ではありません)...しかし、なぜですか?

2 === str.split("-").length;
于 2012-11-28T14:08:32.557 に答える
2

indexOfとの組み合わせを使用できます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/

于 2012-11-28T14:18:50.867 に答える
1

型にはまらないが、それは機能します。文字列を操作したり、正規表現を使用したりしません。

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

ここでフィドル

于 2012-11-28T14:27:20.490 に答える