Regex匹配子字符串,但不匹配以单词为前缀的子字符串
Regex match substring, but not when prefixed by word
我有以下两行,它们代表了我处理的数据类型的示例,我目前正在regex101.com和Google Chrome控制台中进行测试。完成后,我希望在Javascript应用程序中使用正则表达式。逻辑本质上是"匹配正则表达式,除非它以"Note"为前缀,其中基本正则表达式是/([0-9].[0-9]+[A-Z]?)/"
General Note 5.32 5.34 5.36
abcdef 5.33
它应该匹配5.34、5.36和5.33。
此正则表达式有效(使用负查找),但在Javascript中不可用:
/(?<!Note )'b([0-9]'.[0-9]+[A-Z]?)/g
基于其他Stack Overflow的答案,我试图将其转换为应该在Javascript中工作的东西,但我最接近的是:
/^(?!Note).+'b([0-9]'.[0-9]+[A-Z]?)/g
在网站上,我看到这与5.34匹配,但与5.33或5.36不匹配。
在Chrome控制台中尝试:
text = 'General Note 5.32 5.34 5.36'nabcdef 5.33';
text.match(/^(?!Note).+'b([0-9]'.[0-9]+[A-Z]?)/g)
然后我得到以下内容,这也不是我想要的:
["General Note 5.32 5.34 5.36"]
有人能建议我该做什么吗?
在没有查找的情况下,您可以使用此基于交替的正则表达式,并使用捕获的组#1进行匹配:
/'bNote 'b'd'.'d+[A-Z]?'b|'b('d'.'d+[A-Z]?)'b/g
RegEx演示
代码:
var re = /'bNote 'b'd'.'d+[A-Z]?'b|'b('d'.'d+[A-Z]?)'b/g;
var str = 'General Note 5.32 5.34 5.36'nabcdef 5.33';
var m;
var matches = [];
while ((m = re.exec(str)) !== null) {
if (m.index === re.lastIndex)
re.lastIndex++;
if (m[1])
matches.push(m[1]);
}
console.log(matches);
//=> ["5.34", "5.36", "5.33"]
相关文章:
- 如何在Javascript中从字符串中提取某些单词
- 如何在PHP中获取特定的字符串单词
- 对字符串使用IndexOf来挑选某些单词
- 如何替换数据属性中的特定字符串单词
- 在字符串列表中搜索任何出现的单词,如果单词的第一个字符匹配,则高亮匹配单词.Javascript正则表达式
- 我如何从字符串中选出第一个单词的第一个字母,然后再选出第二个单词
- Regex模式,用于检查字符串中每个单词的第一个字母(如果是Javascript中的大写字母)
- 类别自动完成jQuery中的单词级自定义筛选器,而不是子字符串
- 测试字符串中的多个单词
- 正则表达式以更改字符串中的某些单词
- 输出包含3个单词的字符串中的前2个单词
- Geoplugin字符串结果为德语单词/语言
- 如何知道找到的单词是字符串的一部分还是JavaScript中的函数调用
- 跳过用户输入的文本字符串中的特殊字符,并在 Javascript 中的每个单词后添加连字符
- 单词数组到字符串
- 检查字符串是否等于一个单词和一个数字
- 使用jQuery在p-tag中查找给定字符串的前10个单词和下10个单词
- 计算字符串javascript中的某些单词
- 确定字符串是否包含子字符串(单词)
- 用js替换带有空格的字符串单词