对于下面的String,对于单行文本/字符(以字符开头而不是符号和空格开头),我将使用哪种Regex模式进行匹配(并返回匹配数组)):
** Header
------------------------------------------------------------
https://www.google.com Google Homepage
Test description for Google homepage
Stack Overflow (https://www.stackoverflow.com)
Test description for Stack Overflow
...理想情况下,我希望通过使用Google Apps脚本和RegExp
的{{1}}或exec()
的{{ 1}}:
String
这是我到目前为止拥有的脚本:
match()
...输出:
["https://www.google.com Google Homepage", "Test description for Google homepage", "Stack Overflow (https://www.stackoverflow.com)", "Test description for Stack Overflow"]
^请注意,如何不将匹配项单独记录在一行中。
我也尝试过像function testRegex() {
var test = "** Header\n------------------------------------------------------------\n\nhttps://www.google.com Google Homepage\n\nTest description for Google homepage\n\nStack Overflow (https://www.stackoverflow.com)\n\nTest description for Stack Overflow"
var regExp = RegExp(".*");
var matches = regExp.exec(test);
for each (var match in matches) {
Logger.log("match: " + match);
}
}
这样的正则表达式模式,仅用于以字符开头的行,但没有匹配项。
或者,我改用match: ** Header
match: 0
match: ** Header
------------------------------------------------------------
https://www.google.com Google Homepage
Test description for Google homepage
Stack Overflow (https://www.stackoverflow.com)
Test description for Stack Overflow
更好吗?如果是这样,我想排除以符号或空格开头的行,并获得类似于我上面提到的输出。
答案 0 :(得分:0)
global
匹配一行文字
.*
匹配以字母开头的行
答案 1 :(得分:0)
这可能是矫kill过正,但是可以。
const regex = /([A-Za-z\*\:\.\s/\-\(\)]*)(\\n)/gm;
const str = `** Header\\n------------------------------------------------------------\\n\\nhttps://www.google.com Google Homepage\\n\\nTest description for Google homepage\\n\\nStack Overflow (https://www.stackoverflow.com)\\n\\nTest description for Stack Overflow`;
const subst = `$1\n`;
// The substituted value will be contained in the result variable
const result = str.replace(regex, subst);
console.log('Substitution result: ', result);
See and modify this script on regex101
似乎split
可能更直接,但是我认为您在发布之前就尝试过此操作,并且Q用正则表达式进行了标记。
另外,我怀疑上面的正则表达式可能会大大简化。