【问题标题】:regex matching with special characters metacharacters正则表达式匹配特殊字符元字符
【发布时间】:2013-10-12 03:38:27
【问题描述】:

我正在尝试匹配某些字符串,虽然我必须转义一些特殊字符,但它仍然没有正确匹配。

我有这个

 var first=/.+?(?=\[)/i

仍然匹配整个字符串,只需要匹配第一个 [

这是字符串business[account]

我需要匹配业务然后匹配帐户。它是用于稍后用于获取对象符号的插件。每个元素都有不同的属性。

【问题讨论】:

  • 尝试.match(/(\w+)\[(\w+)\]/) 提取两者。

标签: javascript regex match


【解决方案1】:

对于这么简单的事情,前瞻并不是真正必要的。尝试使用这样的字符类:

var first = /[^[]+/

这将匹配一个或多个任意字符除了 [

如果您想将其转换为可以匹配字符串的两个部分(如 "business[account]")的正则表达式,请尝试以下操作:

/([^[]+)\[([^\]]+)\]/

这将匹配一个或多个[,在第 1 组中捕获,然后是 [,然后是一个或多个以外的任何字符 ],在第 2 组中被捕获,随后是 ]

例如

console.log(/([^[]+)\[([^\]]+)\]/.exec("business[account]"));
// ["business[account]", "business", "account"]

【讨论】:

  • 关闭非常接近期望它仍然抓住最后一个]
  • 好的,我喜欢这个。虽然我不喜欢输出。 ["extend[me]", "extend", "me", index: 0 , input: "extend[me]]
  • @EasyBB 你不喜欢它什么?输出有问题吗?
  • 太多了,我想我还是要投票,谢谢。
  • @EasyBB exec 函数将返回一个包含多个元素的数组。元素 0 将是整个匹配的字符串,1 将是第一组,2 将是第二组,依此类推。如果你不需要它,你可以忽略第一个元素,或者甚至 splice 它。
【解决方案2】:

你快到了;只需添加组(带括号)以匹配您想要的:

var m = /(.+?)\[(.+?)\]/.exec("business[account]");
console.log("variable: " + m[1], "index: " + m[2]);

【讨论】:

  • 我得到了一个未终止的组
  • @EasyBB 确保您在某处没有错字。 Here is an online demo
  • 好吧,我不知道为什么,但现在可以了。虽然我应该使用惰性运算符还是应该使用 p.s.w.g 的正则表达式
  • 哦,感谢您的编辑;)不确定它是否使我的操作中的代码语法正确,就像我说我在手机上一样哈哈
猜你喜欢
  • 2021-11-03
  • 1970-01-01
  • 1970-01-01
  • 2020-12-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-06
相关资源
最近更新 更多