【问题标题】:Regex to match only if symbol in string used once仅当字符串中的符号使用一次时,正则表达式才匹配
【发布时间】:2013-05-26 18:43:20
【问题描述】:

也许这是一个简单的问题,但今天我有点坚持。

只有当符号 % 在字符串中出现一次时,我才需要正则表达式来匹配..

例如:

/regexpForSymbol(%)/.test('50%') => true
/regexpForSymbol(%)/.test('50%%') => false

谢谢!

【问题讨论】:

标签: javascript regex


【解决方案1】:

你可以使用:

^[^%]*%[^%]*$

锚点可以确保覆盖每个角色,您可能已经知道[^%] 的作用。

【讨论】:

  • 你应该使用 PCRE 否定 (!) , ^[!%}*%[!%]*$。谢谢。
  • @Frank 这不是一个有效的语法。
【解决方案2】:

给你。不过不要指望每个人都会一直为你做这些。

^      # Start of string
[^%]*  # Any number of a character not matching `%`, including none.
%      # Matching exactly one `%`
[^%]*  # 
$      # End of string

【讨论】:

  • 没有必要投反对票。如果它是重复的,我很乐意将其删除。仅仅因为它是重复的,无论如何都不会出错。
  • @Kosmetika 我已经为您解释了正则表达式。这是非常基本的正则表达式。如果你喜欢使用正则表达式,你应该阅读一下。
【解决方案3】:

您不需要正则表达式。

function checkIfOne(string, char) {
    return string.split(char).length === 2;
}

用法:

var myString = "abcde%fgh",
    check = checkIfOne(myString, '%'); // will be true

【讨论】:

    【解决方案4】:

    您可以使用match 并计算结果数组:

    str.match(/%/g).length == 1
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-08-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-16
      相关资源
      最近更新 更多