javascript - 为什么这个正则表达式返回字符而不是换行符
问题描述
我想在“test”之前插入一些东西,我使用这个正则表达式并期望它会返回换行符,但它会返回“h”,所以如果我用替换方法插入,我实际上不会像我想要的那样在“test”之前插入:在哪里错误?
https://jsfiddle.net/y4qh629a/
const test = `
blah blah
test blah blah`;
const regex = /[^"]\s*(?=test)/;
const match = test.match(regex);
alert(match)
解决方案
否定字符类 [^"] 使用除 char 之外的单个字符"
,在此示例中为h
char。
如果你想在匹配之前添加一些东西,你可以使用replace代替或者concat匹配返回的值(注意匹配返回一个数组,并且const test
不能被覆盖)
在这种情况下,您可以使用捕获完整匹配。在替换中使用完全匹配使用$&
.
请注意,除了存在之外,至少应该有一个字符"
,它也可以是一个空白字符。
const test = `
blah blah
test blah blah`;
console.log(test.replace(/[^"]\s*(?=test)/, "$&[replacement]"));
如果您还想test
在字符串的开头进行匹配:
const test = `test here
blah blah
test blah blah`;
console.log(test.replace(/(?:^|[^"])\s*(?=test)/g, "$&[replacement]"));
推荐阅读
- arrays - 将 spark.sql.DataFrame 转换为 Array[Array[Double]]
- sql - 如何在 IN 子句中将逗号字符串作为单个字符串传递
- function - 为什么“返回”结束一个函数
- python - 提取方向,公交Gps数据
- .net - Excel 自动化命名冲突“_FilterDatabase” - MFC ole 自动化与 C# .NET 的不同行为
- android - 我怎样才能得到这种类型的视图?
- mysql - MySQL 表约束要求列总和等于 1
- javascript - 禁用未测试文件的覆盖 - 开玩笑
- java - 使用 @Transactional(propagation = Propagation.REQUIRES_NEW) 注释的 Service 方法的 Spring Boot 集成测试
- r - 反应性对象在 r 闪亮的其他部分不起作用,除非输出时