首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >正则表达式适用于regex101.com,但不适用于prod

正则表达式适用于regex101.com,但不适用于prod
EN

Stack Overflow用户
提问于 2016-09-22 18:06:06
回答 1查看 9.3K关注 0票数 13

https://regex101.com/r/sB9wW6/1

<--正向后视中的问题

像这样工作在

,但我需要一个正确的起始索引(不带空格)。

下面是JS中的代码:

代码语言:javascript
运行
复制
var regex = new RegExp(/(?:(?<=\s)|^)@(\S+)/g);

分析正则表达式时出错:无效的正则表达式: /(?:(?<=\s)|^)@(\S+)/

我做错了什么?

更新

好的,在JS中没有后视:(

但不管怎样,我需要一个正则表达式来获得正确的比赛开始和结束索引。没有前导空格。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-09-22 18:10:22

确保您始终在regex101.com上选择正确的regex引擎

..。查看由于使用

仅JS兼容的正则表达式

Python中的构造

..。

JS regex -

在回答这个问题时

-不支持lookbehinds。现在,它变得越来越被采用,因为

它在ECMAScript 2018中的引入

..。您在这里并不真正需要它,因为您可以使用捕获组:

代码语言:javascript
运行
复制
var re = /(?:\s|^)@(\S+)/g; 
var str = 's  @vln1\n@vln2\n';
var res = [];
while ((m = re.exec(str)) !== null) {
  res.push(m[1]);
}
console.log(res);

The The The

将空格或字符串开头与

,然后匹配

,然后匹配和

捕获

将一个或多个非空格字符添加到组1中

..。

要获取开始/结束索引,请使用

代码语言:javascript
运行
复制
var re = /(\s|^)@\S+/g; 
var str = 's  @vln1\n@vln2\n';
var pos = [];
while ((m = re.exec(str)) !== null) {
  pos.push([m.index+m[1].length, m.index+m[0].length]);
}
console.log(pos);

奖金

我的regex在regex101.com上工作,但不在...

首先

,你有没有检查过

代码生成器

中的链接

工具

窗格在左边?

-确保针对代码中使用的相同文本进行测试,

文字字符串

,在regex测试程序中。一种常见的场景是复制/粘贴

字符串文字

值直接输入到测试字符串字段中,并使用所有字符串转义序列,如

(换行符),

(回车),

(制表符)。请参见

正则表达式

_

搜索c++

,例如。请记住,它们必须替换为它们的文字对应项。所以,如果你在Python中有

,则必须使用

,两个换行符,

在regex测试程序文本字段中。

永远不会与之匹敌

尽管你

可能会认为它“有效”

..。是的,

并不总是与换行符匹配,请参见

如何匹配正则表达式中跨多行的任何字符?

-确保在您的

字符串文字

,在大多数语言中,在

常规字符串文字

,使用双反斜杠,即

在regex101.com上使用,必须写成

..。在

原始字符串文字

,使用单个反斜杠,与regex101相同。转义

词边界

是非常重要的,因为在许多语言中(

C#

Python

Java

JavaScript

红宝石

等),

用于定义退格符,即它是有效的

字符串转义序列

..。PHP不支持

字符串转义序列,因此

=

好了。

-请注意,默认情况下

在regex101.com中启用了标志。因此,如果您使用

,它们将相应地在行的开始和结束处匹配。如果您需要在代码中使用相同的行为,请检查多行模式是如何实现的,并使用特定的标志,或者-如果支持的话-使用内联

嵌入(内联)修饰符。The The The

标志支持多次匹配,通常使用特定的函数/方法来实现。检查您的语言参考以找到合适的语言参考。

换行符

-

行尾

在regex101.com are LF only,您不能测试以CRLF结尾的字符串,请参见

regex101.com与myserver -不同的结果

..。对于每个正则表达式库,解决方案可以是不同的:

(PCRE、Java、Ruby)或某种

(Boost,PCRE),

/

(适用于.NET)或

在其他库中(请参阅

C#

PHP

)。

与测试多行字符串(而不是独立字符串/行的列表)的正则表达式相关的另一个问题是,您的模式可能会消耗行尾,

,char with negated类,请参见

像这样的问题

..。

匹配行字符的结尾,为了避免它,

可以使用,或者其他替代方案。

php

您正在处理Unicode字符串,或者希望速记字符类也与Unicode字符匹配(例如

匹配

或者

,或者

匹配硬空格),则需要使用

修饰符

,请参阅

普雷格

_

match()返回0,尽管regex测试程序可以工作

要匹配所有匹配项,请使用

,not

使用

,请参阅

PHP preg

_

匹配以查找多个匹配项

“中的未知修饰符'g‘...”使用preg时

_

在PHP中匹配?

带有内联反向引用的正则表达式,如下所示

拒绝工作?您使用的是双引号字符串文字吗?使用单引号,请参阅

反向引用在PHP中不起作用

php

幼体

注意,您需要在模式周围使用正则表达式分隔符,请参见

https://stackoverflow.com/questions/22430529

python

你用过

,它只搜索字符串开头的匹配项,使用

正则表达式在Pythex上工作得很好,但在Python中就不行了

如果正则表达式包含捕获组,

返回捕获/捕获元组的列表。使用非捕获组,或者

,或删除多余的捕获组,请参阅

re.findall的行为很奇怪

如果您使用

在模式中表示一行的开始,而不是整个字符串的开始,或使用

若要表示行尾而不是字符串,请传递

或者

标志为

方法,请参见

使用^匹配Python regex中的行首

如果您尝试在多行中匹配一些文本,并使用

或者

,或者

/

,但仍然不起作用,请检查您是否逐行阅读该文件,例如,使用

..。必须将整个文件内容作为输入传递给regex方法,请参见

在新行中获取两个字符之间的所有内容

..。

c#

.net

.NET正则表达式不支持

所有格量词

喜欢

,请参阅

带有所有格量化的可选文本之间的.NET正则表达式匹配数字不起作用

当您匹配多行字符串并使用

选项(或内联

修饰符),并使用

在要匹配的模式中锚定

整行

,并且在代码中没有匹配,则需要添加

之前

,请参阅

将$与字符串末尾而不是行尾匹配的.Net正则表达式,即使在启用了多行的情况下也是如此

要获得

多个匹配

,使用

,not

,请参阅

RegEx在字符串中多次匹配

与上面类似的情况:通过双行换行序列将字符串拆分为段落-

C# /正则表达式模式在在线测试中有效,但在运行时不起作用

您应该删除正则表达式分隔符,即

实际上必须看起来像

,请参阅

简单且经过测试的包含正则表达式分隔符的在线正则表达式在C#代码中不起作用

如果您不必要地使用

转义正则表达式中的所有字符(如

)您需要删除

,请参阅

正则表达式在正则表达式测试器中工作,但在c#中不起作用

dart

颤动

使用原始字符串文字,

,或双反斜杠(

)-

https://stackoverflow.com/questions/59085824

javascript

中的双转义反斜杠

为什么正则表达式构造函数需要双重转义?

(负面)大多数浏览器不支持的外观:

正则表达式可以在浏览器上运行,但不能在Node.js中运行

字符串是不可变的,则将

结果转换为var -

.replace()方法不会就地更改字符串

检索

全部

匹配

-

Regex101和Js正则表达式搜索显示不同的结果

或者,使用

使用RegExp.exec从字符串中提取所有匹配项的RegEx

替换

全部

字符串中的模式匹配:

为什么使用替换时javascript只替换第一个实例?

javascript

角度

如果使用字符串文字定义正则表达式,或仅使用正则表达式文字表示法,请使用双反斜杠,请参见

https://stackoverflow.com/questions/56097782

java

单词边界不工作?确保使用双反斜杠,

,请参阅

正则表达式\b字边界不起作用

获取

例外?同样的,双反斜杠-

Java不能与regex \s一起工作,表示:无效的转义序列

困扰着你吗?运行

/

-

为什么我的正则表达式可以在RegexPlanet和regex101上工作,但不能在我的代码中工作?

需要完整的字符串匹配,请使用

Java Regex模式,在任何在线测试程序中都匹配,但在Eclipse中不匹配

访问组使用

正则表达式在Java中不工作,而在其他情况下工作

在character类中,两者都

必须转义-

在Java regex中的字符类中使用方括号

你不应该跑

连续地,仅使用

若要检查模式是否与整个字符串匹配,然后执行相应操作,或使用

检查是否只有一个匹配项,或者

查找多个匹配项(或

)。请参见

为什么我的正则表达式可以在RegexPlanet和regex101上工作,但不能在我的代码中工作?

kotlin

你有

什么?去掉外部斜杠,它们是

正则表达式分隔符字符

不是模式的一部分。请参见

正则表达式在代码中不匹配,但正则表达式很好

您期望的是部分字符串匹配,但是

是否需要完整的字符串匹配?使用

,请参阅

正则表达式在Kotlin中不匹配

mongodb

请不要随身携带

使用单引号/双引号,请参见

mongodb正则表达式不起作用

c++

需要完整的字符串匹配,请使用

为了找到部分匹配-

正则表达式与C++正则表达式不能像预期的那样工作

_

匹配

仅查找第一个匹配项。使用

或者

要获取所有匹配项:请参见

std::match是什么

_

结果::大小返回?

读取用户定义的字符串时,请使用

,请注意

将只读到第一个空格,要正确读取整行,请使用

-

匹配'+‘限定符的C++正则表达式

不起作用,则需要使用

或者

(

原始字符串文字

)-

此正则表达式在c++中不起作用

确保针对文字文本而不是字符串文字测试正则表达式,请参见

正则表达式

_

搜索c++

开始

双反斜杠或使用原始字符串文字:

正则表达式在Go中不起作用

Go正则表达式不支持环视,请选择正确的选项(

),在测试之前,请访问regex101.com!

正则表达式求反集合不工作golang

groovy

返回所有匹配项:

在regex101上工作的正则表达式在Groovy上不能工作

R

字符串文字中的双转义反斜杠:

grep中的"'\w‘是无法识别的转义“

使用

至PCRE引擎(

/

):

为什么这个使用lookbehinds的正则表达式在R中是无效的?

oracle

所有量词的贪婪程度由正则表达式中的第一个量词设置,请参见

Regex101 vs Oracle Regex

(然后,您需要使所有量词都像第一个量词一样贪婪)

firebase

双转义反斜杠,确保

仅出现在模式的开头,并且

仅位于末尾(如果有),请注意您不能使用超过9个内联反向引用:

Firebase规则Regex生日

firebase

google-cloud-firestore

在Firestore安全规则中,正则表达式需要作为字符串传递,这也意味着它不应该包装在

符号,即使用

...请参见

https://stackoverflow.com/questions/63243300

google-data-studio

必须不包含

正则表达式分隔符和标志(如

)-请参阅

如何使用Regex替换Google Data Studio中日期字段中的方括号?

google-sheets

如果你认为

不返回完全匹配,则截断结果,您应该检查正则表达式中是否有多余的捕获组并将其删除,或者通过添加将捕获组转换为非捕获组

开业后

,请参阅

在Google表格中提取url域名根

sed

为什么我的正则表达式在X中起作用,但在Y中不起作用?

词边界

pcre

php

不能在正则表达式测试器中工作,尽管它们是PCRE中的有效构造,请参见

https://stackoverflow.com/questions/48670105

票数 44
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39636124

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档