JS 正则表达式正面向后看不匹配
Posted
技术标签:
【中文标题】JS 正则表达式正面向后看不匹配【英文标题】:JS regexp positive lookbehind no match 【发布时间】:2021-11-11 02:26:11 【问题描述】:这是我要匹配的字符串和句子(提取)。
let pigs = "\X The animal 0000 I really dig \X Above all others is the pig. 222 \X Pigs are noble. Pigs are clever 3333, \X Pigs are 5555 courteous.\X However, Now and then, to break this 6666 rule, \X One meets 7777 a pig who is a fool. \X"
" Pigs are 5555 courteous."
这是我的代码的两个版本。当我在各种正则表达式检查网站上签到时,它会给出所需的匹配。但是当我在浏览器控制台中运行时,它给出了 null。我有最新的 Chrome 版本。为什么浏览器控制台不在这里输出匹配?
pigs.match(/(?<=\\X)[^\\X]*5555[^\\X]*(?=\\X)/g);
pigs.match(/(?:\\X)[^\\X]*5555[^\\X]*(?:\\X)/g);
【问题讨论】:
如果你想让pigs
字符串中的反斜杠变成文字,你需要转义它们。
试试console.log(pigs)
,你会看到\X
变成了X
。
为什么浏览器会自动消除每个字符串中的反斜杠?
反斜杠是转义前缀。它要么开始一个转义序列(如\n
换行),要么生成下一个字符。
【参考方案1】:
您可以使用以下模式:
(?<=\X)(?:.(?!\X))+5555.+?(?=\X)
我更改的是:(?:.(?!\X))+
- 这是非捕获组,表达式匹配一个或多个字符,后面没有\X
。
另外,您错误地使用了[^\\X]
- 它只是一个否定类,它将匹配除\
或X
之外的任何字符。
以下JS示例:
let pigs = "\X The animal 0000 I really dig \X Above all others is the pig. 222 \X Pigs are noble. Pigs are clever 3333, \X Pigs are 5555 courteous.\X However, Now and then, to break this 6666 rule, \X One meets 7777 a pig who is a fool. \X"
let match = pigs.match(/(?<=\X)(?:.(?!\X))+5555.+?(?=\X)/g)
console.log(match)
【讨论】:
以上是关于JS 正则表达式正面向后看不匹配的主要内容,如果未能解决你的问题,请参考以下文章