【问题标题】:Regex: capture everything until specific word(s)正则表达式:捕获所有内容,直到特定单词
【发布时间】:2013-04-02 09:38:23
【问题描述】:

我有两个字符串的变体,例如:

学生的伙伴*作者:Alcock, Pete;May, Margaret;Wright, Sharon*MIL EAN/ISBN:9781283333115

Java 编程:Java 专家*作者:Sarang, Poornachandra*MIL EAN/ISBN:9781280117268

现在,我想抓住第一作者:Alcock、Pete aand Saran、Pooranachandra。

现在在 Javascript 中,我正在尝试做:

var regex = new RegExp("(Author:)\\s(.+)(?=;|MIL)");
var regexVal = value.match(regex);
console.log(regexVal);

var regex = new RegExp("(Author:)\\s(.+)(?=MIL)");
var regexVal = value.match(regex);
console.log(regexVal);

如果有一个作者,第二个正则表达式工作得很好,但是,如果有多个作者,我想选择值直到第一个 ; 而不是 MIL

| 匹配任一部分,所以,它不应该在 first 时停止;找到了吗?

问候, 大快朵颐

【问题讨论】:

  • 如果第二个对您有用,请尝试使用 ^ 运算符从 (.+) 中排除 ;
  • 感谢您的建议。
  • 请注意,如果你想表达价值,stackoverflow cmets 也可以像答案一样被投票。

标签: javascript regex regex-lookarounds


【解决方案1】:

你可以使用:

var regex = /Author:\s([^;*]+)/;

或者如果那些* 不在字符串中:

var regex = /Author:\s((?:(?!MIL)[^;])+)/;

var regex = /Author:\s([^;])+?)(?=;|MIL)/;

【讨论】:

  • @Ravish 回答可以被接受,如果你想表达他们的价值并感谢作者。
【解决方案2】:

通过修改正则表达式解决了我的问题:

(Author:)(([^;])+)(;|MIL)

这个正则表达式说 : 应该以 "Author:" 开头 neget the ;并且应该以 ; 结尾或 MIL。

谢谢

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-12-21
    • 1970-01-01
    • 1970-01-01
    • 2022-06-15
    • 2023-03-19
    • 2019-02-20
    相关资源
    最近更新 更多