【问题标题】:Javascript RegExp ignores MetacharactersJavascript RegExp 忽略元字符
【发布时间】:2016-07-15 15:37:20
【问题描述】:

我一直在努力解决这个问题,但没有任何运气。如果有人能指出正确的方向,将不胜感激。

问题在于 RegExp 对象完全忽略了 \b\s 元字符。

var orOperator = 'or';
var term = 'ipsum';
var str = 'lorem or ipsum or ipsumal';
var regex = new RegExp('(\\s)\\b' + orOperator + '\\s' + term + '\\b', 'gi');
console.log(regex);

str = str.replace(regex, '');

而生成的正则表达式应该是

/(\s)\bor\sipsum\b/gi

我一直得到这个(去掉了元字符),我不知道为什么

/(s)orsipsum/gi

【问题讨论】:

  • 你的脚本的运行环境是什么?我在 Chrome、Safari 和 Firefox 上进行了尝试,所有 3 都给了我你期望的结果
  • 我无法重现该问题:eval.in/606020。你如何显示模式?
  • 我认为我下面的话可能无济于事,但是,正如我记得在 C++ 中,两个斜杠会挤到一个斜杠上,你需要四个单斜杠才能真正得到一个斜杠来转义
  • 这不是一个正则表达式问题,而是一个简单的字符串问题。您想知道当您“剥离元字符”和显示字符串时会得到一个奇怪的结果,但您必须了解'\\' 不代表两个反斜杠,而是一个反斜杠。 '\b' 将消失,因为它代表退格字符,并且由于 '\s' 不代表任何内容,反斜杠被剥离(忽略)。您必须区分包含字符串的内容和如何表示(编写)它。
  • @YKal 恭喜!操作系统问题可能吗?总之,问题解决了,加油! ✨

标签: javascript regex


【解决方案1】:

正如@YizhengShen 和@CasimiretHippolyte 在 cmets 中建议的那样,每个元字符使用 4 个反斜杠就可以了。

var regex = new RegExp('(\\\\s)\\\\b' + orOperator + '\\\\s' + term + '\\\\b', 'gi');

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-12
    • 1970-01-01
    • 2018-09-24
    • 2020-09-12
    相关资源
    最近更新 更多