使用Regex识别以引号开头但返回子字符串

时间:2015-12-11 21:13:21

标签: javascript regex

我真的很难让这个正则表达式代码发挥作用。我是初学者,并尝试使用正则表达式来识别JSON中的某个字符串。

例如,在此数据中:

window.dataAnalyticsJSON = {
    "configuration": {
        "SiteCatalyst": {
            "reportSuiteId": "testsuite"
        },
        "marketingRegion": "gb",
        "contentLanguage": "en",
        "contentLocale": "gb",
        "currency": "GBP"
    },
    "pageId": "testpage",
    "siteSection": "testsitesection",
    "site": "testsite",
    }
}

我正在尝试提取值' testpage ' (没有引号) - 只有那个。我已经尝试了多个Beginning with formulaes,但没有一个只返回这个值。

到目前为止,我的最佳解决方案是:

"pageId": "testpage

正则表达式为

/["'](pageId": ".*?)["']/g

如何在自己的 testpage 上返回?我的想法是,我可以在网站上运行此代码,以快速获取单个页面名称。

提前感谢您提供的任何帮助!

5 个答案:

答案 0 :(得分:4)

您将pageId放入捕获组。

尝试:

/pageId": "(.*?)"/g

Example

答案 1 :(得分:2)

我认为这样可行:

"pageId": "([a-z0-9]*),

括号中的部分形成一个组,然后您可以使用

$1

获取相应的名称。如果允许使用特殊字符,

"pageId": "(.*)", #would work

答案 2 :(得分:2)

如果你有一个JSON文件,为什么还需要正则表达式。

$.getJSON('../data/fileName.json', function (data) {
  $.each(data,function (index, istance) {
    if (istance.pageId === "testpage") {
      //do your staff with testpage
    } 
  });
}); // end get

JSON文件通常具有一种具有某种含义的结构,可以理解,使用.getJSON函数,您可以随意执行任何操作。

答案 3 :(得分:1)

您正在寻找的是前瞻性和后瞻性,这意味着正则表达式引擎正在寻找每个可能匹配前后的组,但不会将它们包含在匹配中。

对你有用的案例是(?<=\"pageId\"\:\s\")(.*)(?=\")

?<=表示一个lookbehind,这意味着必须在正则表达式中该位置的任何可能匹配之前找到正则表达式组

?=表示前瞻,这意味着必须在正则表达式中该位置的任何可能匹配后面找到正则表达式组

使用https://regex101.com/

进行测试

如果您需要刷新语法,这是一个很好的查找表,用于前瞻/后视http://www.rexegg.com/regex-lookarounds.html

答案 4 :(得分:-1)

你需要很多学习伙伴:/

试试这个:

/\"pageId\"\:\s\"(.*?)\"/   

在此测试您的示例:

https://regex101.com/r/mL3yR9/1

如果你只想要pageId的值,你也可以json解码这个变量并通过数组找到值。

欢迎你:)将此标记为最佳答案。如果您想捐款,请告诉我:P或者您是否希望我给您一些学费!