首页 >web前端 >js教程 >如何在 JavaScript 正则表达式中实现负向后查找?

如何在 JavaScript 正则表达式中实现负向后查找?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-12-19 06:53:13449浏览

How Can I Implement Negative Lookbehind in JavaScript Regex?

如何在 JavaScript 中实现负向后查找

JavaScript 本身并不支持负向后查找,这会阻碍创建与以下字符串匹配的正则表达式:不要以特定字符开头。

使用 Lookbehind 的解决方案断言(2018 年之后)

2018 年,JavaScript 引入了lookbehind 断言,允许正向和负向lookbehind:

  • 正向lookbehind: (?<=...)
  • 负向后查找: (?

例如,以下正则表达式匹配'm' 字符在 'jim' 或 'm' 中,但不在'jam':

(?<!([abcdefg]))m

2018 年之前的解决方案

2018 年之前,一种解决方法涉及反转输入字符串,与反转的正则表达式匹配,然后反转匹配。这个过程可以按如下方式实现:

const reverse = s => s.split('').reverse().join('');

const test = (stringToTests, reversedRegexp) => stringToTests
  .map(reverse)
  .forEach((s,i) => {
    const match = reversedRegexp.test(s);
    console.log(stringToTests[i], match, 'token:', match ? reverse(reversedRegexp.exec(s)[0]) : 'Ø');
  });<p><strong>示例</strong></p>
<p>说明其用法:</p>
<ul><li>对于中提到的最初问题在上下文中,以下正则表达式将匹配“jim”或“m”中的“m”,但不匹配'jam':</li></ul>
<pre class="brush:php;toolbar:false">test(['jim', 'm', 'jam'], /m(?!([abcdefg]))/)
  • 另一个例子,匹配“max-height”但不匹配“line-height”:
test(['max-height', 'line-height'], /thgieh(?!(-enil))/)

以上是如何在 JavaScript 正则表达式中实现负向后查找?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn