如何在 Javascript Regex 中匹配单个单词?

问题描述 投票:0回答:3

我只想在 javascript 中的模式后匹配一个单词 (\w+)。

这是我的简单测试代码:

(new RegExp("apple:\w+")).test("apple:asdf");

但是,javascript 告诉我该模式不匹配。这几乎违背了我习惯的正则表达式匹配的一切。即使我在 regex101.com 上测试它,我也得到了匹配。

匹配单词的约定是什么?

javascript regex
3个回答
4
投票

首先,您需要转义字符串文字中的斜杠,否则它将丢失:

const slashIsLost = "apple:\w+";
console.log(slashIsLost); // apple:w+

const slashIsEscaped = "apple:\\w+";
console.log(slashIsEscaped ); // apple:\w+

其次,您需要记住

\w
匹配字母、数字和
_
字符。因此,您最好改用
[A-Za-z]
字符类 - 或者只咬第一对并使用
i
标志使 RegExp 不区分大小写。

作为旁注,真的不清楚为什么不在这里使用 RegExp 文字:

/apple:[a-z]+/i.test('apple:asdf')

0
投票

您的想法很好,但是在使用 RegEx 构造函数时需要转义反斜杠。 MDN 推荐:

使用构造函数提供运行时编译 正则表达式。当你知道的时候使用构造函数 正则表达式模式会改变,或者你不知道 模式并从其他来源获取它,例如用户输入。

另一种方法是正则表达式文字语法:

正则表达式文字提供正则表达式的编译 加载脚本时的表达式。如果正则表达式 保持不变,使用它可以提高性能。

试试这个代码:

const re = /apple:\w+/
const str = "apple"
re.test(str)

查看 MDN 文档


0
投票

我想让正则表达式更通用一些。 而且,由于我在问题中阅读了匹配,我认为其他人会寻找匹配表达式,而不是像我一样进行测试。

就我而言,我必须在与您的模式类似的模式之后匹配单词(数字:)。另外,冒号后面可以有多个空格

所以,我的答案是这样的,如果你需要实际匹配一个单词,而不是测试:

'number: 5646 bksfdg df34'.match(/number:\s*([0-9]+)/)

这样,/s*表示忽略所有空格,直到下一个模式,而([0-9]+)是“number:”模式+

之后所有后续数字的匹配组

如果您需要匹配一个单词,正如 @raina77ow 建议的那样,您可以在我的正则表达式中使用 ([a-z]+)

我知道这更多地回答了标题而不是具体的OP,但正如我告诉你的,我希望这可以帮助其他来这里寻找匹配而不是测试正则表达式函数的人

© www.soinside.com 2019 - 2024. All rights reserved.