问题标签 [lookbehind]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
2328 浏览

php - 正则表达式:向后看以避免奇数个连续反斜杠

我有用户输入,其中方括号内允许使用一些标签。我已经编写了正则表达式模式来查找和验证括号内的内容。

在用户输入字段中,左括号([)可以用反斜杠转义,反斜杠也可以用另一个反斜杠(\)转义。我需要后视子模式以避免在打开括号之前出现奇数个连续反斜杠。

目前我必须处理这样的事情:

它工作正常,但问题是这段代码仍然匹配括号前面可能的连续反斜杠对(即使它们是隐藏的),并且向后看只是检查是否有另一个单个反斜杠附加到对(或直接到左括号) . 如果可能的话,我需要在后视组中避免它们。

例子:

我使用 PHP PCRE

0 投票
2 回答
180 浏览

php - PHP 正则表达式:几个带有正面后视的停止字符

嗨 stackoverflow 社区!
我正在尝试在 PHP 中使用基于Positive lookbehind的简单正则表达式。我的目标是提取 URL 中域名和一组特定字符(?或 & 或 /)之间的所有内容。我想在这些例子中提取“bar”:

  • foo.com/bar?
  • foo.com/bar&
  • foo.com/bar/

我试过

它在平台测试中运行良好, 但不适用于 PHP 5.3x preg_match :抛出的错误是我不能使用多个停止字符 - 它适用于一个。

我还尝试了积极的后视/前瞻组合,但问题仍然存在。我做错什么了 ?

0 投票
1 回答
147 浏览

regex - 正则表达式实现是否真的需要一个 split() 函数?

是否有任何单个(或等)操作split()无法执行的正则表达式操作应用程序?match()search()findall()

例如,而不是做

你可以通过调用来获得相同的结果

并且在几乎所有正则表达式引擎(.NET 和 JGSoft 除外)中,split() 不能做一些事情,比如“|除非它们被转义,否则拆分\|”,因为你需要在后视中无限重复。

因此,不必像这样做一些非常难以理解的事情(嵌套的lookbehinds!)

你可以简单地做(即使在不支持任何后视的 JavaScript 中)

这让我想知道:有什么我可以做的事情是split()用单个match()/无法实现的findall()吗?我敢打赌没有,但我可能忽略了一些东西。

(我在现代、非常规的意义上定义“正则表达式”,即使用现代正则表达式拥有的一切,如反向引用和环视。)

0 投票
5 回答
19723 浏览

python - 与某些扩展不匹配的正则表达式模式?

我写了这个模式

但是有一个问题 - 此模式匹配 file.name.jpg(2 点)

它在 filename.jpg 上正常工作(不匹配)。我试图弄清楚如何使它不匹配任何 .jpg 文件,即使文件名中有 2 个或更多点。我尝试使用向后看,但 python 抱怨没有使用固定宽度(我不确定这意味着什么,但文件名将是可变长度。)

0 投票
5 回答
4495 浏览

regex - Perl Regex:如何从 CSV 行中删除引号内的引号

我有一个 CSV 文件中的一行,其中包含字段分隔符",字段分隔符作为字符串。有时",数据中存在破坏字段封闭符的数据。我正在寻找一个正则表达式来删除这些".

我的字符串如下所示:

我看过这个,但我不明白如何告诉它只删除引号

  1. 不在字符串的开头
  2. 不在字符串的末尾
  3. 前面没有,
  4. 后面没有,

我设法用这行代码告诉它同时删除 3 和 4 :

但是,我无法将^and$放在那里,因为前瞻和后瞻都不喜欢写成(?<!(^|,)).

除了拆分字符串并从每个元素中删除引号之外,有没有办法仅使用正则表达式来实现这一点?

0 投票
1 回答
303 浏览

python - python regex:匹配一个被正好2个字符包围的字符

我需要一个 python 中的正则表达式,它匹配被正好 2 个下划线包围的任何字符。意思,意思

将匹配“a”,但

不会匹配。它需要支持重叠匹配,这样

将返回“ac”,因为 a 被双下划线包围,但 d,e 旁边有一个三重下划线,b 两边都有一个三重下划线。我现在拥有的

它解决了重叠,但不是上面示例中的“恰好 2”,它返回“adbec”

0 投票
3 回答
1171 浏览

c# - 匹配字符串与正则表达式,只要它没有被括号包围

我正在寻找匹配字符串“Order By XXX”,其中 XXX 可以是任何字母、数字、句点、逗号、空格或方括号。但是,如果它没有被括号包围,我只想匹配它(一侧的括号是可以的,只要它不在两侧)。所以它应该匹配“”中的斜体部分,因为它不应该匹配任何东西

应该匹配(斜体匹配部分):

  • 从 Y顺序按 z选择 X
  • Select y = (select top 1 Z from C Order by [ID] desc )

不应该匹配:

  • 从 Y 中选择 X(按 z 排序)
  • Select aa, NTILE(4) OVER (Order by ab) group by ac

我有用于按文本匹配订单的正则表达式字符串:[ ]*order by [\w,.\[\] ]+。但是,我在正确地进行前瞻/落后工作时遇到了一些麻烦。关于如何进行的任何建议?

0 投票
3 回答
2136 浏览

c# - 需要固定长度的正则表达式吗?

我有这个使用向前和向后预测的正则表达式:

我正在尝试将它从 C# 移植到 Python,但不断收到错误消息

是否可以在不失去意义的情况下用 Python 重写它?

这个想法是让它匹配类似的东西

更新

我正在使用环视来解析我修改过的 HTTP 多部分文本

我只想在进行拆分时获取文件路径和其他文本,而不必删除开始和结束标签

<!inc(代码简洁很重要,但如果它使正则表达式可行,我愿意更改格式。

0 投票
4 回答
191 浏览

javascript - Javascript Regex - 假装后视的意外行为

我正在尝试编写一个小部件来整理来自多个来源的推文作为练习(类似的东西存在这里,但是a)那里提供的列表选项没有加载我的任何列表,并且b)这是一个有用的学习练习!)。作为其中的一部分,我想编写一个正则表达式,用指向用户 Twitter 页面的链接替换 ​​Twitter 句柄('@' 后跟字符)。但是,我不希望出现误报,例如,推文中的电子邮件地址。

因此,例如,替换应该发送

在这个问题的指导下,这表明我需要某种方式在 Javascript 中复制负面的后视,我编写了以下代码:

但是,在触发三元运算符的最后部分的情况下,$0 包含“@”符号。这出乎我的意料——因为 '@' 没有括在括号中,我希望 $0 匹配 '([^\s,.;:]*)' - 即 Twitter 用户的用户名(之后,和没有,'@')。我可以通过使用 $0.substring(1) 获得所需的功能,但我想进一步了解。

有人可以指出我误解了什么吗?我对正则表达式很陌生,从来没有用 Javascript 编写过它们,也没有使用过负面的后视。

0 投票
2 回答
523 浏览

c# - 如何删除字符串C#之间的一些文本

我有这样的文字:

LINE\r\n 5\r\n11DA3\r\n330\r\n2\r\n100 \r\nAcDbEntity\r\n 8\r\n0-FD\r\n 6\r\nHIDDEN\r\n100

看一下粗体字。我想替换 5\r\n 和 \r\n100 之间的文本。我试过这段代码:

但它不起作用。我的代码有问题吗?我确定 (\S+?) 是问题所在。有什么办法解决吗?