【问题标题】:Get string inside parentheses using jQuery or Javascript使用 jQuery 或 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,,

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

【问题讨论】:

  • 当你不想要它们的特殊功能时,你必须转义像( )这样的特殊字符。
  • @Andreas Um no...括号在字符类中,因此不需要转义。
  • @TimBiegeleisen 有两组(( ... )) 不属于字符类。其中任何一个都没用或应该转义
  • @Andreas Pointless 也许......但它们只是嵌套的捕获组。你的cmets都错了。

标签: javascript jquery regex


【解决方案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,我更新了我的答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-06-30
  • 2016-08-30
  • 1970-01-01
  • 2012-01-24
  • 1970-01-01
  • 2015-10-16
  • 1970-01-01
相关资源
最近更新 更多