18

我有一个如下字符串:

single-hyphen

我需要匹配连字符。但是,我只想匹配一次出现的连字符,不多也不少。

所以上面的字符串会返回true,但下面的两个会是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

奇怪(而不是 Regex)......但为什么不呢?

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 回答