【问题标题】:javascript regex returning null, trying to get text between parenthesesjavascript正则表达式返回null,试图在括号之间获取文本
【发布时间】:2012-09-14 22:35:15
【问题描述】:

尝试将“表 2”或任何可能的表编号(有时为 2 位)放入变量中。知道为什么这会返回null吗?

 var productText = '25-08-12 Boat Cruise (Table 2)';
 var rgx = /^\(\)$/;
 var newText = productText.match(rgx);
 alert(newText);

【问题讨论】:

  • 无意冒犯,但真正的答案是“为什么?”是“你不知道自己在做什么”。有人可能会针对这个特定问题发布一个格式正确的正则表达式,但您可能想退后一步,对正则表达式一般进行一些阅读/理解,然后再尝试将其应用于即使是微不足道的问题。见Cargo-Cult Programming
  • 当然,发布一个不是解决方案的答案,而是发布一个“著名”程序员的链接,这不是粉丝或货物崇拜。
  • 你说得对,我不太清楚如何使用正则表达式。我试着做一些阅读并弄清楚,这就是我得到的结果。抱歉,32bitkid,但有时为了节省时间,最好向乐于助人的社区求助,而不是多花 2 小时做某事。

标签: javascript regex match


【解决方案1】:

改用以下内容:

var rgx = /\(([^)]+)\)/;
var match = productText.match(rgx);
var newText = match && match[1];
// newText's value will be "Table 2" if there is match; null otherwise

当你有/^\(\)$/ 时,你实际上是在尝试match 字符串"()",不多也不少。相反,您应该在文本中的任何位置匹配(,将其与下一个) 之间的所有内容存储在捕获组([^)]+) 中,以便稍后可以使用match[1] 引用捕获的组。

如果您只需要号码,请使用/\(Table (\d+)\)/

【讨论】:

  • 应该是var newText = match && match[1];,因为match 可能评估为null,并且尝试访问match[1] 会在这种情况下抛出。
  • @ŠimeVidas:好的,谢谢,我已经编辑了我的答案来说明这一点。
  • 我不建议将var 语句inside 放在if 语句中,因为这意味着该变量仅是有条件地声明的,即仅当 if-条件满足。这当然不是真的,变量是无条件声明的。因此,将变量声明在代码的顶部,然后在if 语句中进行简单的赋值会更合适。
  • 一般同意这一点,但这真的取决于OP想要做什么,如果有匹配。
  • 嗯,我的意思是一般。变量声明不应放在复合语句中。这可能会导致混乱和误解。
【解决方案2】:
var rgx = /\((.*)\)/

将表号捕获到一个组中。

您的正则表达式当前显示

'给我()开头(^)和字符串结尾($)'。

【讨论】:

  • 所以,我看到一个眼睛青肿的人在空中举起双手:P
【解决方案3】:

^ 表示一行的开始和

$ 表示行结束。

另外,您需要一些内容来匹配() 中的文本,例如:.*

指出后,/^\(\)$/ 将仅匹配 ()

那么,一个可行的例子可能是:

var productText = '25-08-12 Boat Cruise (Table 2)';
var rgx = /\(.*\)/;
var newText = productText.match(rgx)[0];
newText = newText.replace('(','');
newText = newText.replace(')','');
alert(newText);

seeing what you needed之后,我会推荐使用jQuery's data

【讨论】:

    猜你喜欢
    • 2011-06-21
    • 1970-01-01
    • 2020-03-14
    • 1970-01-01
    • 2019-01-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多