如何匹配RegEx / JavaScript中特定的出现长度?

时间:2016-03-17 09:12:25

标签: javascript regex

我有以下变量:

var arg = '--test';

arg的价值可以从一两次炒作开始:---,但不能更多。

我想处理这个,我想我应该用这个问题做RegEx。

到目前为止,我的代码是:

if(arg.substr(0, 2).match(/-{1,2}/gi)) {
    // doing my stuff here...
}

我所做的是剪切字符串的前两个字符并尝试测试该切片字符串中的超级密码,但RegEx不是我强大的一面,所以这就是我被困住的地方。

基本上,我想测试字符串/参数中是否至少有一个或最多两个-超标。

2 个答案:

答案 0 :(得分:2)

试试这个RegEx

/^--?(?!-)/

工作原理:

  • ^选择字符串的开头
  • -选择第一个连字符
  • -?选择可选的第二个连字符
  • 如果有第三个连字符,
  • (?!-)会失败

要选择---,您可以使用以下两者:

  • --?3位数)
  • -{1,2}6位数)

我使用了第一种方法,因为它更短更容易阅读

答案 1 :(得分:1)

您可以在(?!-)之后使用^-{1,2}否定前瞻限制连字符的数量:

/^-{1,2}(?!-)/

请参阅regex demo

模式分解:

  • ^ - 字符串的开头
  • -{1,2} - 一个或两个连字符
  • (?!-) - 如果在开头有2个连字符后有连字符,则匹配失败。

注意要检查正则表达式是否与JS中的给定字符串匹配,最好使用RegExp#test()方法,请参阅下面的演示。

function tst() {
  var arg = document.getElementById("test").value;
  if (/^-{1,2}(?!-)/.test(arg)) {     // <======== Check if a string matches the pattern
    document.getElementById("res").innerHTML = arg + " matched"; 
  } else {
    document.getElementById("res").innerHTML = arg + " failed to match"; 
  }
}
<form>
 <input id="test" value="---test" placeholder="<Input a test string>"/>
 <input type="submit" onclick="tst()" id="r"/>
 <div id="res"/>
</form>