使用 jQuery 或 Javascript 获取括号内的字符串

Posted

技术标签:

【中文标题】使用 jQuery 或 Javascript 获取括号内的字符串【英文标题】:Get string inside parentheses using jQuery or Javascript 【发布时间】:2021-10-15 16:24:57 【问题描述】:

我需要在圆括号内获取字符串的一部分,例如字符串可以是:

FirstName LastName ( myemail@address.org )

我正在使用以下代码:

let string = 'FirstName LastName ( myemail@address.org )';
const regExp = /(([^()]*))/g;
let email = string.match(regExp);

当我尝试获取并打印电子邮件变量时,我得到了这个:

FirstName LastName ,,myemail@address.org,,

我的代码有什么问题? 非常感谢您的帮助。

【问题讨论】:

当你不想要它们的特殊功能时,你必须转义像( )这样的特殊字符。 这能回答你的问题吗? Regular Expression to get a string between parentheses in javascript @Andreas Um no...括号在字符类中,因此不需要转义。 @TimBiegeleisen 有两组(( ... )) 不属于字符类。其中任何一个都没用或应该转义 @Andreas Pointless 也许......但它们只是嵌套的捕获组。你的cmets都错了。 【参考方案1】:

我的代码有什么问题?

您的模式是错误的,这就是您得到错误结果的原因。 可能您想匹配模式中除括号之外的所有内容((([^()]*))),但这也匹配括号外的所有字符串,这就是为什么您根据模式输出得到FirstName LastName ,,myemail@address.org,, 实际上是正确的。这是除了括号之外的所有内容。

你可以使用这个模式:(?<=\().*?(?=\))

解释:

(?<=\() 这称为positive lookbehind 并回头检查(不匹配仅检查)其中的模式是否在后面?如果是则继续匹配。

.*? 匹配所有内容零次或多次。

(?=\)) 这被称为positive lookahead 并期待检查(不匹配只是检查)其中的模式是否在前面?如果是则继续匹配。

因此,总体而言,此模式搜索首先以 ( 开头的字符串,然后匹配所有内容,直到下一个字符为 )

见正则表达式Demo

代码:

let string = 'FirstName LastName ( myemail@address.org )';
const regExp = /(?<=\().*?(?=\))/g;
let email = string.match(regExp);
console.log(email[0].trim());

【讨论】:

不是我的 DV,但是当使用 (?&lt;=\().*(?=\)) 时,这里的 .* 将匹配到最后一次出现 ) 请参阅 regex101.com/r/07e8Si/1 我认为它可能类似于 \(\s*([^()]*?)\s*\) 或当它是一封电子邮件\(\s*([^\s@]+@[^\s@]+)\s*\) 谢谢@Thefourthbird,我更新了我的答案。

以上是关于使用 jQuery 或 Javascript 获取括号内的字符串的主要内容,如果未能解决你的问题,请参考以下文章

使用 JavaScript 或 jQuery 获取当前月份的第一个和最后一个日期 [重复]

使用 jQuery 或 Javascript 获取括号内的字符串

如何使用 javascript 或 jquery 仅从字符串中获取所有 HTML 标记? [关闭]

如何使用 Javascript 或 Jquery 获取网页图标/ Apple 触摸图标和标题?

如何使用 c# 或 jQuery 或 Javascript 获取客户端系统/PC 域名和 PC 名称

如何使用 javascript 或 jquery 在 iframe 中获取 li 数据属性