如何找到正则表达式以匹配没有前导和尾随空格的字符
示例:“这是一个示例字符串”
需要正则表达式来捕捉字符“a”,例如。
这是一个 a mple String。
由于
答案 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.map
或Array.filter
匹配数组来预处理字符串。但如果你的问题甚至复杂怎么办?或者出于某种原因你只想使用正则表达式?!
不幸的是,因为 Lookbehind Assertions 没有完全适应并且可供所有人使用,一种非常接近的方法是执行多个正则表达式,即在一个RegExp中找出一个模式然后再执行另一个RegExp匹配的结果。
在这里,我认为人们可能会尝试/(?:[^\s])(a)(?:[^\s])/g
:
(?:...)
断言将确保...
匹配,但不会在群组中捕获。
[^/s]
排除空格,只需匹配一次,除非您希望完全匹配以匹配更多字符。
(...)
将在第一组中捕获。在这种情况下,...
为a
。
同样,如果没有JavaScript中的 Lookbehind Assertions ,则无法在不捕获其邻居的情况下匹配模式。因此,需要另一个正则表达式来处理String.replace
或String.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