Javascript 正则表达式匹配特定关键字
我试图使用regexp来匹配一些特定的关键字 对于下面的代码,我只想匹配第一行和第二行的IFs,它们没有前缀和后缀。我现在使用的regexp是\bIF | ELSE\b,它将返回所有的ifJavascript 正则表达式匹配特定关键字,javascript,regex,Javascript,Regex,我试图使用regexp来匹配一些特定的关键字 对于下面的代码,我只想匹配第一行和第二行的IFs,它们没有前缀和后缀。我现在使用的regexp是\bIF | ELSE\b,它将返回所有的if IF A > B THEN STOP IF B < C THEN STOP LOL.IF IF.LOL IF.ELSE 提前谢谢你的帮助。 我正在用它做测试。 需要使用JS。我猜这就是您想要的,假设您已经为多行添加了m标志: (?:^|\s)(IF|ELSE)(?:$|\s) 它由三个组
IF A > B THEN STOP
IF B < C THEN STOP
LOL.IF
IF.LOL
IF.ELSE
提前谢谢你的帮助。
我正在用它做测试。
需要使用JS。我猜这就是您想要的,假设您已经为多行添加了m标志:
(?:^|\s)(IF|ELSE)(?:$|\s)
它由三个组组成:
?:^ |\s-匹配行首或单个空格字符
如果| ELSE-匹配您的关键字之一
?:$|\s-匹配行尾或单个空格字符。
我猜这就是您想要的,假设您已经为multiline添加了m标志:
(?:^|\s)(IF|ELSE)(?:$|\s)
它由三个组组成:
?:^ |\s-匹配行首或单个空格字符
如果| ELSE-匹配您的关键字之一
?:$|\s-匹配行尾或单个空格字符。
你可以用lookaround-lookahead+lookback来做。这是您真正想要的,因为它明确匹配您正在搜索的内容。您不希望在匹配项周围检查其他字符,如字符串开头或空格,但如果没有被点包围,则完全匹配
/(?<!\.)(IF|ELSE)(?!\.)/g
说明:
使用g标志查找所有引用
? 是一个与Y相匹配而不在X之前的负向查找
YX是一个负前瞻,它匹配Y而不是后跟X
工作示例:
PS:如果你不必为JS编写正则表达式,最好使用一个支持posix标准的工具,比如regex101.com,你可以通过lookaround lookahead+lookback来完成。这是您真正想要的,因为它明确匹配您正在搜索的内容。您不希望在匹配项周围检查其他字符,如字符串开头或空格,但如果没有被点包围,则完全匹配
/(?<!\.)(IF|ELSE)(?!\.)/g
说明:
使用g标志查找所有引用
? 是一个与Y相匹配而不在X之前的负向查找
YX是一个负前瞻,它匹配Y而不是后跟X
工作示例:
PS:如果您不必为JS编写正则表达式,那么最好使用支持posix标准的工具,如regex101.comif是否总是出现在行首?例如,是否要在测试IF某物时匹配IF?\b如果| ELSE\b在末尾添加空格?@nickb否,位置是随机的:IF是否总是出现在行首?例如,是否要在测试IF某物时匹配IF?\b如果| ELSE\b在末尾添加空格?@nickb否,位置是随机的:谢谢我已经测试过了。它起作用了。对于第二行,它将在开始时计算这些空白。这是可行的,但我认为更好的做法是使用我的答案中描述的lookaround,因为它更有用explcit@AndreasLinden我已经测试了你的答案,但它不起作用。nickb我刚刚意识到在第四行,它将匹配字符串后面的所有空格,这不是我想要的@你用的正则表达式是什么语言?JS?你指的是哪一行?谢谢!我已经测试过了。它起作用了。对于第二行,它将在开始时计算这些空白。这是可行的,但我认为更好的做法是使用我的答案中描述的lookaround,因为它更有用explcit@AndreasLinden我已经测试了你的答案,但它不起作用。nickb我刚刚意识到在第四行,它将匹配字符串后面的所有空格,这不是我想要的@你用的正则表达式是什么语言?JS?你指的是哪一行?你测试过这个吗?负面回顾以?开头,而不是。此外,OP正在使用JS的regex引擎的regexr上进行测试,至少根据regexr.oops这是一个打字错误,它不支持负面的lookbehind。非常感谢。更新后的链接。这是posix标准,没有限制使其与JSKB一起工作。同意nickb。/?@安德烈亚斯·林登:你的回答很有帮助,而且很正确。但是我需要和JS一起工作。再次感谢。你测试过这个吗?负面回顾以?开头,而不是。此外,OP正在使用JS的regex引擎的regexr上进行测试,至少根据regexr.oops这是一个打字错误,它不支持负面的lookbehind。非常感谢。更新后的链接。这是posix标准,没有限制使其与JSKB一起工作。同意nickb。/?@安德烈亚斯·林登:你的回答很有帮助,而且很正确。但是我需要和JS一起工作。再次感谢。