首页 > 解决方案 > RegEx 用于检查另一个字符之后的字符 X 位置

问题描述

我已经完成了一个非常基本的步骤,它检查是否存在一个特殊字符。下一步需要一些建议,因为我希望能够在找到 # 后从 1 个位置开始搜索另一个特殊字符。

var reg = /#/;
alert(reg.test(string))

例如:

abc#.123     //invalid - as . is immediately after #
abc#12.3     //valid  - as . is more than 1 character after #
abc#abcd.23  //valid - as . is more than 1 character after #
a#123.12     //valid - as . is more than 1 character after #
a#12123124.12 //valid - as . is more than 1 character after #
abcd#1231.09  //valid - as . is more than 1 character after #
1.23#12312.01 //invalid - as . is before #
123#122.01#12 //invalid - as there is another# after .

#因此, and之间的差距.应该始终是 1 个或多个字符,并且#始终排在第一位。

标签: javascriptregexregex-negationregex-lookaroundsregex-greedy

解决方案


您可以使用/^[^\.#]*#[^\.#]+\.[^\.#]*$/.

^  beginning of line anchor
 [^\.#]*  zero or more characters other than . and #
        #  literal # character
         [^\.#]+  one or more characters other than . and #
                \.  literal . character
                  [^\.#]*  one or more characters other than . and #
                         $  EOL

通常,/^[^\.#]*#[^\.#]{5,}\.[^#\.]*$/如果您想要一个特定大小的最小间隙(在本例中为 5 或更大),或者{5}您希望间隙正好为 5,请使用。

var reg = /^[^\.#]*#[^\.#]+\.[^\.#]*$/;

[
  "abc#.123",      // invalid - as . is immediately after #
  "abc#12.3",      // valid - as . is more than 1 character after #
  "abc#abcd.23",   // valid - as . is more than 1 character after #
  "a#123.12",      // valid - as . is more than 1 character after #
  "a#12123124.12", // valid - as . is more than 1 character after #
  "abcd#1231.09",  // valid - as . is more than 1 character after #
  "1.23#12312.01", // invalid - as . is before #
  "123#122.01#12", // invalid - as there is another# after .
].forEach(test => console.log(reg.test(test)));


推荐阅读