我已经做过一些研究,例如'How do you use a variable in a regular expression?',但是没有运气。
这是给定的输入
const input = 'abc $apple 123 apple $banana'
每个变量都有其自己的值。
目前,我能够使用给定字符串查询所有变量
const variables = input.match(/([$]\w+)/g)
使用以下代码通过循环variables
数组进行替换无法成功
const r = `/(\$${variable})/`;
const target = new RegExp(r, 'gi');
input.replace(target, value);
但是,如果不使用变量,它将被执行
const target = new RegExp(/(\$apple)/, 'gi');
input.replace(target, value);
我还将变量标志从$
更改为%
或#
,并且它与以下代码兼容,
// const target = new RegExp(`%{variable}`, 'gi');
// const target = new RegExp(`#{variable}`, 'gi');
input.replace(target, value);
在这种情况下如何将$
符号与变量匹配?
答案 0 :(得分:1)
大约一年以来,我几乎每天都在使用正则表达式。我会发表自己的想法,然后说:
正则表达式在查找文本或数据的一部分时最有用 文件。
如果其中包含“苹果”或某些派生词的文本文件,则正则表达式可能是一个很好的工具。在撰写外国新闻翻译(基于HTML)时,我每天都会使用它们来解析HTML内容。
我相信发布的代码是用JavaScript编写的(因为我看到了replace(//,"gi")
这个脚本语言所使用的函数。我自己使用了Java's java.util.regex
包,其语法是只是稍有不同。
如果您要做的只是在字符串中放置一个“占位符”,我想这代码可以工作,但是,再次理解为什么需要“正则表达式”似乎是真正的问题。在此示例中,我使用了&符号作为占位符-因为我知道一个事实,它不是(大多数但不一定是所有)正则表达式编译器使用的“保留关键字”之一和处理器。
var s1 = "&VAR1"; // Un-used variable - leaving it here for show!
var myString = "An example text-string with &VAR1, a particular kind of fruit.";
myString.replace(/&VAR1/gi, "apple");
如果您想以一种很好的方式来练习正则表达式,请访问此网站并试用它们:
以下是RegEx模式(从该站点复制)的“保留键符号”的规则:
以下字符具有特殊含义,应在前面加上 用\(反斜杠)表示文字字符: + *?^ $。[] {}()| /
在字符集中,只需要转义\,-和]。
此外,“最重要”的种类-正则表达式在Java中是“编译”的。我不确定它们在Java脚本中的工作方式- ,但是在正则表达式的Compiled-Expression部分中没有诸如“变量”的概念-仅在文本和数据中分析。 是什么意思-如果您想更改Java中特定文本或数据中的搜索内容,则必须使用以下方法重新编译表达式:
模式p = Pattern.compile(regExString,标志);
没有一种简单的方法可以“动态地更改”表达式中文本的特定值。它将增加的复杂性将是天文数字,其价值则是最小的。相反,只需在代码中编译另一个表达式,然后再次搜索即可。另一种选择是更好地理解.* .+ .*? .+?
甚至(.*) (.+) (.*?) (.+?)
之类的东西,以使发生变化,发生变化的事物以及保持不变的事物不会发生!
例如,如果您使用此模式来匹配不同变量:
input.replace(/&VAR.*VAREND/gi, "apple");
您所有的变量都可以通过重复使用的模式来识别:“&VAR-stuff-VAREND”,但这只是 数百万种 的更改方式想法-给猫剥皮。
答案 1 :(得分:1)
如果理解正确,请使用with tf.Session as sess:
sess.run(train_init_op)
image_train, label_train = next_element
sess.run(valid_init_op)
image_val, label_val = next_element
sess.run(test_init_op)
image_test, label_test = next_element
。
您可以在Fiddle下方检查,如果只有一个斜杠,则将导致RegExp为(\\$${variable})
(斜杠和以下字符被转义:\ $ => $),但是/($apple)/gi
表示结尾正则表达式中的字符串如果不能转义的话。
因此解决方案是添加另一个斜杠。
就像下面的演示一样:
$
答案 2 :(得分:1)
使用replace回调函数,您可以避免为每个变量构建单独的正则表达式,并立即全部替换它们:
const input = 'abc $apple 123 apple $banana'
const vars = {
apple: 'Apfel',
banana: 'Banane'
}
let result = input.replace(/\$(\w+)/g, (_, v) => vars[v])
console.log(result)
如果apple
和banana
是局部变量,这将不起作用,但是使用局部变量还是个坏主意。