【问题标题】:Detect problems with ellipsis using JavaScript RegExp使用 JavaScript RegExp 检测省略号问题
【发布时间】:2018-02-14 18:06:30
【问题描述】:

我有一些包含三个点的字符串...但有时它们只包含一行中的两个点,或者一行中包含三个以上的点。我正在尝试检测点太多或太少的字符串。

此正则表达式有效,但仅适用于 Chrome: /((?<![.])[.]{2}(?![.])|(?<![.])[.]{4,}(?![.]))/g

其他浏览器的 JavaScript RegExp 引擎不支持lookbehinds,根据我的阅读,我无法重写它以使lookbehind 成为lookahead,因为regex 已经具有lookahead。

也许我根本不需要基于 RegExp 的解决方案?不过我没看到。

字符串匹配模式:

I have too many dots....and that's a problem
................
...Hey, that's not going to work..

字符串不匹配模式:

Here's a big success ...and that's great!
0.30.

【问题讨论】:

  • 您是在进行替换过程还是仅进行匹配?
  • 翻转这个可能会简单得多,并且只匹配 do 连续包含 3 个点的字符串。你能用它来工作吗?
  • 为什么不直接用 ... 替换所有 2+ 点的实例,例如 this: \.{2,}。我认为你只是在考虑整个场景。
  • 哦,对了。我不认为他在搜索/替换,只是验证?问题不是 100% 确定。
  • @CAustin 我明白你的意思。我会等待OP发表评论。如果我假设它是一个简单的替换是错误的,我会删除我的答案,但我不明白为什么他们会尝试匹配位置而不是根据问题的主题/上下文替换字符。

标签: javascript regex regex-lookarounds


【解决方案1】:

我认为你想多了。只需定位 2 个或更多点的所有位置,忘记不匹配 ...,因为无论如何这都是你的替代品。

See regex in use here

\.{2,}

替换:...

var s = `I have too many dots....and that's a problem
................
...Hey, that's not going to work..

Here's a big success ...and that's great!
0.30.`
var r = /\.{2,}/g

console.log(s.replace(r, '...'))

【讨论】:

  • 如果我想做匹配,只是为了检查一下,看起来s.replace(/\.{2,}/g,'...') !== s 会起作用,是吗?我认为这是我正在尝试解决的一个相当小众的问题,我对这个简单的解决方案非常满意。
  • @MartinBurch 您可以使用回调函数来测试匹配是否等于替换。如果该测试为真,则您匹配 ...。请参阅stackoverflow.com/questions/3395843/… 了解更多信息
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-12-05
  • 1970-01-01
  • 2019-01-23
  • 1970-01-01
相关资源
最近更新 更多