如何使用正则表达式匹配不属于更长标识符组成部分的指定字符串
问题解答
这个需求完全可以通过正则表达式实现。
匹配正则
使用支持前后断言的正则引擎(日常用的VS Code等编辑器、Python/JS等主流语言的正则库都支持),可以直接用如下模式匹配目标内容:
(?<!props\.)selectedRow\b(?!Ids)
各部分规则对应需求:
(?<!props\.):负向后行断言,直接过滤掉所有前方紧接props.前缀的selectedRow,不管props本身挂载在哪个对象下都能生效selectedRow:目标匹配字符串\b(?!Ids):单词边界+负向前瞻断言,确保selectedRow后方不会紧接Ids,排除掉selectedRowIds中包含的同名片段
行号获取方式
- 如果是在VS Code、Notepad++这类文本编辑器中搜索,开启正则匹配模式输入上述规则,搜索结果会直接展示所有匹配项对应的行号
- 如果是写代码处理,逐行遍历文本做正则匹配,命中规则就记录当前行号即可;也可以开启多行匹配模式,通过匹配位置前的换行符数量计算行号
测试用例验证
对给出的三行测试内容:
this.state.selectedRow this.props.selectedRow selectedRowIds
- 第一行:
selectedRow前是state.、后无Ids后缀,命中匹配 - 第二行:
selectedRow前紧接props.,被规则过滤 - 第三行:
selectedRow后紧接Ids,被规则过滤
最终匹配结果完全符合仅命中第一行的预期。
内容的提问来源于stack exchange,提问作者zmii
相关产品推荐
相关产品推荐

