Javascript正则表达式只匹配一个匹配项,不多也不少
我有一个字符串,如下所示:Javascript正则表达式只匹配一个匹配项,不多也不少,javascript,regex,Javascript,Regex,我有一个字符串,如下所示: single-hyphen 我需要匹配连字符。但是,我只想匹配一次连字符,不多也不少 因此,上面的字符串将返回true,但下面的两个字符串将返回false: 1. a-double-hyphen 2. nohyphen 如何定义正则表达式来实现这一点 提前谢谢。奇怪(不是正则表达式)。。。但为什么不呢 2 === str.split("-").length; 你可以这样做 /^[^-]+-[^-]+$/ ^描述字符串的开头 $描述字符串的结尾 [^-]+将1与
single-hyphen
我需要匹配连字符。但是,我只想匹配一次连字符,不多也不少
因此,上面的字符串将返回true,但下面的两个字符串将返回false:
1. a-double-hyphen
2. nohyphen
如何定义正则表达式来实现这一点
提前谢谢。奇怪(不是正则表达式)。。。但为什么不呢
2 === str.split("-").length;
你可以这样做
/^[^-]+-[^-]+$/
^
描述字符串的开头
$
描述字符串的结尾
[^-]+
将1与除-
/^[^-]*-[^-]*$/
字符串开头、任意数量的非连字符、连字符、任意数量的非连字符、字符串结尾。您可以使用和的组合:
非传统,但它很有效。它不操纵字符串或使用正则表达式
// only true if only one occurrence of - exists in string
(str.indexOf("-") + 1) % ( str.lastIndexOf("-") + 1 ) === 0
FiddleJava正则表达式不使用分隔符。@Tomalak:JavaScript不是Java。为什么
[^-]*?
而不是[^-]*
?不情愿的匹配没有用,我会使用+
而不是*
。更好:^[^-]+-[^-]+$
@Tomalak:当单个连字符位于字符串的开头或结尾(“-foo”
,“foo-”
)时,+
版本将不匹配大小写;但是它们是带有一个连字符的字符串,并且满足OP的要求(除非OP误述了他的目标)。是的,这是有效的,因为我希望连字符在两个字符之间,而不是在末尾,但是@Amadan的观点很好。我想现在我将使用/^[^-]*-[^-]*$/
,不过只是为了确定一下。@Amadan我假设字符串开头/结尾的一个连字符应该无效。不过,OP对此并不清楚。哈哈……是的,这就是阿甘正传应该做的。我本可以做的和你做的一样,但我需要一个正则表达式。@Chuckugwu好吧,在这种情况下,我会选择正则表达式,当且仅当它是一个要求。是的,它有点像是一个要求。不过非常感谢你的建议。还有《阿甘正传》的引用。那么,在“-”之前至少有一个字符,在“-”之后至少有一个字符,这是不是一个要求?或者不,只是简单地检查字符串中是否有“-”?比如“-asdf”或“asdf-”是否有效?如果要求在开头和结尾处使用“-”以外的字符,那么您可以使用以下内容:-可能不是最有效的,也不使用正则表达式,但只是一个选项-这就是为什么它是一个注释,而不是答案。@Ian谢谢。我特别想找一个正则表达式,我在下面找到了。
// only true if only one occurrence of - exists in string
(str.indexOf("-") + 1) % ( str.lastIndexOf("-") + 1 ) === 0