我有一个如下字符串:
single-hyphen
我需要匹配连字符。但是,我只想匹配一次出现的连字符,不多也不少。
所以上面的字符串会返回true,但下面的两个会是false:
1. a-double-hyphen
2. nohyphen
我如何定义一个正则表达式来做到这一点?
提前致谢。
我有一个如下字符串:
single-hyphen
我需要匹配连字符。但是,我只想匹配一次出现的连字符,不多也不少。
所以上面的字符串会返回true,但下面的两个会是false:
1. a-double-hyphen
2. nohyphen
我如何定义一个正则表达式来做到这一点?
提前致谢。
你可以这样做
/^[^-]+-[^-]+$/
^
描述字符串的开头
$
描绘了字符串的结尾
[^-]+
匹配 1 到多个字符,除了-
/^[^-]*-[^-]*$/
字符串的开头,任意数量的非连字符,一个连字符,任意数量的非连字符,字符串的结尾。
奇怪(而不是 Regex)......但为什么不呢?
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
在这里提琴