用于匹配单行文本/字符的正则表达式模式

时间:2019-01-27 22:06:31

标签: javascript regex google-apps-script

对于下面的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 更好吗?如果是这样,我想排除以符号或空格开头的行,并获得类似于我上面提到的输出。

2 个答案:

答案 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用正则表达式进行了标记。
另外,我怀疑上面的正则表达式可能会大大简化。