Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/415.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript正则表达式只匹配一个匹配项,不多也不少_Javascript_Regex - Fatal编程技术网

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

Fiddle

Java正则表达式不使用分隔符。@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