测试正则表达式中是否存在字符

时间:2019-03-22 03:01:00

标签: regex vue.js

我有一些要与之匹配的字符串

  1. 咖啡馆团队成员:Grovedale(精选)
  2. 咖啡馆团队成员:Barwon Heads(精选)
  3. 咖啡馆团队成员:Barwon Heads

我想出的是/(?<=\:\s)(.+)(?=\s\()/g,它将对选项1和2起作用,但对3起作用(因为我要在位置后寻找一个开放的支架),它将不起作用。我为无法解决这个问题而感到困惑。

Where i have been testing

编辑:

我需要添加的所有内容都是|$,所以现在看起来像/(?<=\:\s)(.+)(?=\s\(|$)/g,但是在Codepen中对其进行测试时,它仍然无法正确捕获字符串。 regexr所说的应该起作用的地方。

// vue stuff
new Vue({
    el: "#app",
    data: {
        titles: [
          "Cafe Team Member: Grovedale (Featured)",
          "Cafe Team Member: Barwon Heads (Featured)",
          "Cafe Team Member: Barwon Heads",
        ]
    }
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>
<div id="app">
  <template v-for="title in titles">
    <p>{{ title.match(/(?<=\:\s)(.+)(?=\s\(|$)/g) }}</p>
  </template>
</div>

2 个答案:

答案 0 :(得分:1)

尝试使用此正则表达式:

(?<=:\s)[^(\r\n]+

Click for Demo

说明:

  • (?<=:\s)-向后正向匹配位置,以匹配紧跟:后跟空格的位置
  • [^(\r\n]+-匹配1+次出现的既不是(也不是换行符的字符。这将确保匹配所有字符,直到在同一行中找到(。如果未找到(,则匹配到行尾。

答案 1 :(得分:1)

您的正则表达式不匹配,仅因为.+后必须跟?,后者要尽可能少地匹配。没有它,(.+)将一直匹配到行尾,并且您的正向超前将不匹配任何内容。

// vue stuff
new Vue({
    el: "#app",
    data: {
        titles: [
          "Cafe Team Member: Grovedale (Featured)",
          "Cafe Team Member: Barwon Heads (Featured)",
          "Cafe Team Member: Barwon Heads",
        ]
    }
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>
<div id="app">
  <template v-for="title in titles">
    <p>{{ title.match(/(?<=\:\s)(.+?)(?=\s\(|$)/g) }}</p>
  </template>
</div>