【发布时间】:2018-10-06 06:44:24
【问题描述】:
我有以下 PHP 正则表达式问题,可能无法解决。
我需要通过用函数调用替换某些子字符串来预处理 JS 文件。
所以基本上转这个:
var s = "I'll sleep all day when I'm tired";
进入这个:
var s = "I'll sleep all "+getPreference()+" when I'm tired";
到目前为止一切顺利,唯一的问题是我不知道原始JS中使用哪种引号作为字符串分隔符。
字符串也可以是这样的:
var s = 'I\'ll sleep all day when I\'m tired';
这会导致:
var s = 'I\'ll sleep all "+getPreference()+" when I\'m tired';
它只会在执行 JS 时将我的函数调用显示为字符串的一部分。
长话短说,我需要一种安全的方法来确定使用哪个字符串分隔符(" 或 '),然后相应地修改替换字符串。
这里有任何正则表达式天才有想法吗?非常感谢您的帮助。
更新:
非常感谢到目前为止的帮助。 我觉得我没有提供足够的背景信息。
- 正则表达式应该在 PHP 中完成(预处理 JS)而不是通过 JS 中的函数。
- 我什么都不知道,也不能假设关于 JS 的任何事情(例如字符串的开头或结尾),除非它是有效代码。
- 我确切地知道要替换什么,这不是问题。
考虑这个例子:
message = Theme.addToCartSuccess.replace("**product**",
item.title).replace(
"**cart_link**",
"<a href=\"/cart\">\n REPLACE_ME\n</a>")
.replace("**continue_link**",
"<a\n href=\"/collections/all\"\n>\n
REPLACE_ME\n</a>").replace("**checkout_link**", "<a
href=\"/checkout\">\n REPLACE_ME\n</a>");
return setTimeout(function() {
_this.productMessages.html(message).addClass("success-
message").removeClass("error-message");
在上面的例子中,我需要用 getVar() 替换字符串 REPLACE_ME
更新 2:
我觉得解决这个问题的唯一解决方案是从替换字符串中回溯并分析可能的分隔符:
\" > 分隔符必须是 "
\' > 分隔符必须是'
' 或 " > 可以是,进一步回溯,直到我们遇到 ; > ; 之前的最后一个引号必须是分隔符。
想法?
谢谢, 汤姆
【问题讨论】:
-
我认为主要问题不是引号,而是应该在哪里插入这个函数。
-
快速提问。你不能简单地检查结尾
;之前的分隔符类型吗? -
这很简单,给我几分钟,你怎么知道在哪里插入。
-
Regex 不是用于操作 JavaScript 的合适工具。您需要解析它并重新构建它。或者只是使用查找和替换对您的源代码运行一次“预处理”,也许......
-
不要担心在哪里插入函数调用,这不是问题。我在这里强烈简化了它,但只是假设它总是需要替换“day”这个词。
标签: javascript php regex preg-replace