Google Apps Script中正则表达式匹配Kurs EUR失败求助
问题分析与解决方案
嘿,我来帮你排查这个正则匹配的问题~先理清楚核心问题:你的/(Kurs) EUR/g正则没生效,而另外两个匹配ISIN、STK的正则正常工作,我们从两个维度来拆解:
一、先明确你的真实需求
你之前的ISIN和STK正则都是捕获关键词后面的内容(比如ISIN (\w*)是抓ISIN后的单词),那你对Kurs EUR的需求是:
- 只是匹配“Kurs EUR”这个短语本身?
- 还是要提取“Kurs EUR”后面的数字/数值?
这两种情况的问题原因和解决方案完全不同,我们分别说:
二、如果只是匹配“Kurs EUR”短语但失败
大概率是文本里的空白字符和你正则里的普通空格不匹配,或者有大小写差异:
- 空白字符不一致:文本里可能是多个空格、制表符(Tab)甚至换行,而你用了单个空格。把空格换成
\s(匹配任意空白字符),或者\s+(匹配一个或多个空白):var filter = [/ISIN (\w*)/g, /STK (\w*)/g , /Kurs\s+EUR/g]; - 大小写问题:如果文本里出现小写(比如
kurs eur),加上i修饰符忽略大小写:var filter = [/ISIN (\w*)/g, /STK (\w*)/g , /Kurs\s+EUR/gi];
三、如果是要提取“Kurs EUR”后面的数字(这应该是你的真实需求)
你的原正则/(Kurs) EUR/g只匹配了“Kurs EUR”这个短语,根本没捕获后面的数字,这就是它“无法匹配”的核心原因!
参考ISIN和STK的写法,你需要调整正则,把后面的数值纳入捕获组:
// 匹配Kurs EUR后面的数字(支持小数点、千分位逗号) var filter = [/ISIN (\w*)/g, /STK (\w*)/g , /Kurs EUR\s+([\d.,]+)/g];
\s+:匹配“Kurs EUR”和数字之间的一个或多个空白([\d.,]+):捕获数字部分,支持类似123.45或1.234,56的格式
举个例子,如果你的文本是:
ISIN DE000XYZ789 STK 1000 Kurs EUR 45.67
用这个正则匹配后,ergebnis会返回["Kurs EUR 45.67", "45.67"],其中第二个元素就是你要的数值。
四、额外提醒:关于match的用法
当正则包含捕获组时,match返回的数组会包含:
- 整个匹配的字符串
- 每个捕获组的内容
如果你只需要捕获的内容,可以遍历结果提取对应索引的元素,或者用exec循环获取更精准的结果。
内容的提问来源于stack exchange,提问作者DamianD
相关产品推荐
相关产品推荐

