高级正则表达式 - 设置全局修饰符时仅匹配文件的第一次出现
Advanced regex - match only the first occurence of a file when global modifier set
在我的编辑器中,我尝试在很多文件上放置一个正则表达式,这样如果它找到 jquery 美元函数 $
,它会使 juqery 函数加载 const $ = require('jquery');
基本上,如果我有这样的文件:
$(document).ready(function () {
$('.btn-toggle-achievement').on('click', function (e) {
var button = e.target;
var el = $(button);
$.post('/achievements_ajax/toggle_achievement', {
status: el.data('enable'),
achievement_id: el.data('achievement-id')
});
});
});
我想写一个正则表达式来用 const $ = require('jquery');\n
替换第一次出现的 $
。我在编辑器中使用替换实用程序。最后的结果应该是这样的。
const $ = require('jquery');
$(document).ready(function () {
$('.btn-toggle-achievement').on('click', function (e) {
var button = e.target;
var el = $(button);
$.post('/achievements_ajax/toggle_achievement', {
status: el.data('enable'),
achievement_id: el.data('achievement-id')
});
});
});
这是我目前得到的:
https://regex101.com/r/ooHn9H/1
但此时它取代了 $
的任何出现。我只想替换第一个。我可以确保正则表达式只匹配第一次出现的吗?也许我需要一个负面的回顾来检查 $
之前是否已经匹配?
在您的正则表达式中,您设置了全局标志,这意味着它将替换所有出现的地方。关闭全局标志,你会得到你想要的。
编辑:如果你不能关闭全局标志,匹配一切从第一个$开始:
($(?:.|[\r\n\u2028\u2029])*)
试试这个正则表达式:
^([^$]*)(?=$)
解释:
^
- 断言字符串的开始
[^$]*
- 匹配出现次数超过 0 次的任何非 $
的字符。括号是组中的这部分。稍后,该组中捕获的任何内容都将被该组的内容以及行 const $ = require('jquery');\n
替换,如演示中所示。
(?=$)
- 正面前瞻以验证直到现在匹配的任何内容后跟 $
在我的编辑器中,我尝试在很多文件上放置一个正则表达式,这样如果它找到 jquery 美元函数 $
,它会使 juqery 函数加载 const $ = require('jquery');
基本上,如果我有这样的文件:
$(document).ready(function () {
$('.btn-toggle-achievement').on('click', function (e) {
var button = e.target;
var el = $(button);
$.post('/achievements_ajax/toggle_achievement', {
status: el.data('enable'),
achievement_id: el.data('achievement-id')
});
});
});
我想写一个正则表达式来用 const $ = require('jquery');\n
替换第一次出现的 $
。我在编辑器中使用替换实用程序。最后的结果应该是这样的。
const $ = require('jquery');
$(document).ready(function () {
$('.btn-toggle-achievement').on('click', function (e) {
var button = e.target;
var el = $(button);
$.post('/achievements_ajax/toggle_achievement', {
status: el.data('enable'),
achievement_id: el.data('achievement-id')
});
});
});
这是我目前得到的: https://regex101.com/r/ooHn9H/1
但此时它取代了 $
的任何出现。我只想替换第一个。我可以确保正则表达式只匹配第一次出现的吗?也许我需要一个负面的回顾来检查 $
之前是否已经匹配?
在您的正则表达式中,您设置了全局标志,这意味着它将替换所有出现的地方。关闭全局标志,你会得到你想要的。
编辑:如果你不能关闭全局标志,匹配一切从第一个$开始:
($(?:.|[\r\n\u2028\u2029])*)
试试这个正则表达式:
^([^$]*)(?=$)
解释:
^
- 断言字符串的开始[^$]*
- 匹配出现次数超过 0 次的任何非$
的字符。括号是组中的这部分。稍后,该组中捕获的任何内容都将被该组的内容以及行const $ = require('jquery');\n
替换,如演示中所示。(?=$)
- 正面前瞻以验证直到现在匹配的任何内容后跟$