以下のような文字列があります。
single-hyphen
ハイフンを一致させる必要があります。ただし、ハイフンの 1 回の出現のみに一致させたいと考えています。多かれ少なかれです。
したがって、上記の文字列は true を返しますが、以下の 2 つは false になります。
1. a-double-hyphen
2. nohyphen
これを行うために正規表現を定義するにはどうすればよいですか?
前もって感謝します。
以下のような文字列があります。
single-hyphen
ハイフンを一致させる必要があります。ただし、ハイフンの 1 回の出現のみに一致させたいと考えています。多かれ少なかれです。
したがって、上記の文字列は true を返しますが、以下の 2 つは false になります。
1. a-double-hyphen
2. nohyphen
これを行うために正規表現を定義するにはどうすればよいですか?
前もって感謝します。
あなたはこれを行うことができます
/^[^-]+-[^-]+$/
^
文字列の開始を示します
$
文字列の終わりを示します
[^-]+
1を除く多くの文字に一致します-
/^[^-]*-[^-]*$/
文字列の始まり、任意の数の非ハイフン、ハイフン、任意の数の非ハイフン、文字列の終わり。
奇妙です(正規表現ではありません)...しかし、なぜですか?
2 === str.split("-").length;
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
型にはまらないが、それは機能します。文字列を操作したり、正規表現を使用したりしません。
// only true if only one occurrence of - exists in string
(str.indexOf("-") + 1) % ( str.lastIndexOf("-") + 1 ) === 0
ここでフィドル