用于匹配没有前导和尾随空格的字符的正则表达式

时间:2018-04-23 06:04:17

标签: javascript regex

如何找到正则表达式以匹配没有前导和尾随空格的字符
示例:“这是一个示例字符串” 需要正则表达式来捕捉字符“a”,例如。

这是一个 a mple String。

由于

1 个答案:

答案 0 :(得分:0)

由于原始问题旨在通过JavaScript中的RegExp解决问题,因此我在这里提供了一种纯粹关注表达本身的方法。

众所周知,正则表达式非常强大,但不同的语言在实现时会有细微差别。一个应该更仔细的是不同的浏览器也可能有不同的支持。虽然TC39中的{strong> RegExp Lookbehind Assertions (?<=...)proposal已达到第4阶段,但其实施尚未保证发货。 (例如,Safari 11.1不支持它。)

虽然从Chrome 62 (?<=...) 开始支持,但它仍然没有像ECMAS2018一样(嗯......它很可能被包含在今年发布的ECMA2019中) 。我不建议使用它。 (除非您正在运行服务器端代码,例如在PHP或Node.js&gt; 9中支持它)。

建议使用JavaScript中较不详细的方法,建议通过将字符串拆分为数组并使用正则表达式按Array.mapArray.filter匹配数组来预处理字符串。但如果你的问题甚至复杂怎么办?或者出于某种原因你只想使用正则表达式?!

不幸的是,因为 Lookbehind Assertions 没有完全适应并且可供所有人使用,一种非常接近的方法是执行多个正则表达式,即在一个RegExp中找出一个模式然后再执行另一个RegExp匹配的结果。

在这里,我认为人们可能会尝试/(?:[^\s])(a)(?:[^\s])/g

(?:...)断言将确保...匹配,但不会在群组中捕获。

[^/s]排除空格,只需匹配一次,除非您希望完全匹配以匹配更多字符。

(...)将在第一组中捕获。在这种情况下,...a

同样,如果没有JavaScript中的 Lookbehind Assertions ,则无法在不捕获其邻居的情况下匹配模式。因此,需要另一个正则表达式来处理String.replaceString.match操作中的完全匹配。这是一个例子:

"This is a sample String.".replace(/(?:[^\s])(a)(?:[^\s])/g,
     (fullmatch, group) => fullmatch.replace(/a/, `<strong>${group}</strong>`));

,输出"This is a s<strong>a</strong>mple String.

最后,正如高度推荐的那样,人们可能希望首先使用实时工具来证明表达式。试试这个:https://regex101.com