【问题标题】:Regular expression to allow one specific character at a time [closed]一次允许一个特定字符的正则表达式[关闭]
【发布时间】:2019-11-21 02:41:47
【问题描述】:

我有一个要求,允许任何数字一次只有一个字符(W 或 D),没有顺序。

例如:2w222W2d222D2w5d

不是2wd55dw

我尝试了类似的方法,但它不起作用

[^\\d][w]$.

【问题讨论】:

  • 但它不起作用不是有效的问题描述
  • 试试/\b(?:\d+[wd])+\b/i。有点不靠谱,比如d2,d2w,d2w2,所有这些都不会被这个模式匹配,只是(数字后跟wd)的序列。
  • 是的,你是对的

标签: javascript java regex


【解决方案1】:

这是你要找的吗?

/\b(\d+[dw](?![dw]))+\b/ig

编辑:请参阅上面 cmets 中 @bobblebubble 的答案以获得更好的选择。

请参阅下面或此处的 sn-p:https://regex101.com

const regex = /\b(\d+[dw](?![dw]))+\b/ig;
const str = `2w 55dw 222W 2d 2wd 222D 2w5d`;
let m;

while ((m = regex.exec(str)) !== null) {
  // This is necessary to avoid infinite loops with zero-width matches
  if (m.index === regex.lastIndex) {
    regex.lastIndex++;
  }

  // The result can be accessed through the `m`-variable.
  document.write(`Found match: ${m[0]}<br>`);
}

【讨论】:

  • 我认为你可以在字符类中去掉逗号。
  • 好收获@bobblebubble。我已经编辑了代码。另外,我比我更喜欢上面 cmets 中的正则表达式。感谢分享。
  • 我的正则表达式是基于你的想法 :) 好吧,我们不知道开瓶器真正需要什么。
  • 非常感谢您的回复。
【解决方案2】:
\b(\d*w(\dd)*|\d*d(\dw)*)\b

在这里进行现场测试:https://regex101.com/r/2q9ZDM/1

可能有比 'w then d' OR 'd then w' 更优雅的方式,但我现在没有想到,所以我还是给你这个,因为它运作良好。

【讨论】:

  • 非常感谢您的回复。它的工作。
  • 能否也提供不应该接受这种方式的代码,例如:3w5d(不应该接受这种方式)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-06
  • 1970-01-01
  • 2011-04-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多