如何匹配正则表达式/JavaScript 中出现的特定长度

How to match specific length of occurrences in RegEx/JavaScript?

本文关键字:正则表达式 何匹配 JavaScript      更新时间:2023-09-26

我有以下变量:

var arg = '--test';

arg的值可以从一个或两个连字符开始:---,但不能更多。

我想

处理这个问题,我想我应该对这个问题做正则表达式。

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

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

所做的是切片字符串的前两个字符,并尝试测试切片字符串中的连字符,但 RegEx 不是我的强项,所以这就是我卡住的地方。

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

试试这个正则表达式:

/^--?(?!-)/

工作原理:

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

要选择---,您可以使用 wither of :

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

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

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

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

查看正则表达式演示

模式细分:

  • ^ - 字符串的开头
  • -{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>