在正则表达式中查找加号

IT技术 javascript regex
2021-02-21 00:10:38
var string = 'abcd+1';
var pattern = 'd+1'
var reg = new RegExp(pattern,'');
alert(string.search(reg));

我昨晚发现,如果您尝试在带有 Javascript 正则表达式的文本字符串中查找加号,它会失败。它不会找到那个模式,即使它存在于那个字符串中。这一定是因为一个特殊的字符。在一段文本中找到加号的最佳方法是什么?此外,还有哪些其他角色会失败?

6个回答

Plus 是正则表达式中的特殊字符,因此要将字符表示为数据,您必须通过在它前面加上\.

var reg = /d\+1/;
\-\.\/\[\]\\ **always** need escaping
\*\+\?\)\{\}\| need escaping when **not** in a character class- [a-z*+{}()?]

但是,如果您不确定,在您尝试匹配的非单词字符之前包含转义符也无妨。

数字或字母是单词字符,转义数字是指之前的匹配,转义字母可以匹配不可打印的字符,例如换行符 (\n)、制表符 (\t) 或单词边界 (\b) 或 aa字符集,如任何单词字符 (\w)、任何非单词字符 (\W)。

除非您是认真的,否则不要转义字母或数字。

+1(无双关语)用于提及字符类
2021-05-01 00:10:38
2021-05-02 00:10:38

只是一个笔记,

\应该\\在 RegExp 模式字符串中,RegExp("d\+1")将不起作用并且Regexp(/d\+1/)会出错。

var string = 'abcd+1';
var pattern = 'd\\+1'
var reg = new RegExp(pattern,'');
alert(string.search(reg));
//3
谢谢你!:)
2021-04-17 00:10:38
这会在一个字符组中工作[A-Z\\+]吗?
2021-05-13 00:10:38

您应该在模式中的 + 前面使用转义字符 \。例如。\+

从字符串构造 RegEx 时不是。"\+" 与 "+" 相同,它必须是 "\\+"。
2021-04-27 00:10:38
@David,你的意思是在 C# 中吗?在这种情况下,我通常使用 @ 逐字字符串字符来避免太多 \\\\\\ 符号;)
2021-05-07 00:10:38
@Ash:不可以。例如, var pattern = new RegExp("(\\d+)\\s*\\+\\s*(\\d+)"); 等价于 var pattern = /(\d+)\s*\+\s*(\d+)/;
2021-05-08 00:10:38

您可能需要转义加号:

var pattern = /d\+1/

加号在正则表达式中用于表示一行中的 1 个或多个字符。

不,要么删除模式周围的引号以使其成为真正的 RegExp 对象,要么在反斜杠之前添加一个额外的反斜杠。反斜杠表示 JavaScript 字符串中转义序列的开始。
2021-05-13 00:10:38