我有一些要与之匹配的字符串
我想出的是/(?<=\:\s)(.+)(?=\s\()/g
,它将对选项1和2起作用,但对3起作用(因为我要在位置后寻找一个开放的支架),它将不起作用。我为无法解决这个问题而感到困惑。
编辑:
我需要添加的所有内容都是|$
,所以现在看起来像/(?<=\:\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>
答案 0 :(得分:1)
尝试使用此正则表达式:
(?<=:\s)[^(\r\n]+
说明:
(?<=:\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>