正则表达式映射在 Firefox 上下文菜单内容脚本中
Regex mapping in Firefox context menu contentScript
我正在为 Firefox 开发上下文菜单插件。我正在尝试获取选定的文本并验证它是否是一个数字。如果它是一个数字,我正在使用该数字值进一步处理。
但是,我陷入了尝试在 javascript replace
方法中使用正则表达式替换[(,)]
的地步。
以下是无法映射任何以 (
或 )
开头/结尾的数字的代码:
var menuItemLRG = contextMenu.Item({
label: "LRG",
data: "http://myurl/&val=:",
contentScript: 'self.on("click", function (node, data) {' +
' var selectedText = window.getSelection().toString();' +
' var formattedText1 = selectedText.trim();' +
' var formattedText2 = formattedText1.replace(/^[,'[']()]*/g,"");' +
' var formattedText3 = formattedText2.replace(/[,'[']()]*$/g,"");' +
' console.log(formattedText3); '+
' var regExp = new RegExp(/^[0-9]+$/);' +
' if (regExp.test(formattedText3) == true) {' +
' console.log("URL to follow :"+data+formattedText3);' +
' window.open(data+formattedText3);' +
' } '+
'});'
});
上面的代码无法替换示例输入中的(
或)
:(5663812, 11620033)
.
但是,像下面这样的香草测试会成功:
<script>
var str = "(2342423,])";
var tmpVal1 = str.replace(/^[,'[']()]*/g,"");
var tmpVal2 = tmpVal1.replace(/[,'[']()]*$/g,"");
var regExp = new RegExp(/^[0-9]+$/);
if (regExp.test(tmpVal2) == true) {
alert(tmpVal2);
}
</script>
经过多次试验和错误发现问题。当我们尝试转义单引号内的字符时,我们需要再添加一个转义字符才能被识别,否则单个转义']
将被视为]
,这会导致正则表达式模式的突然结束。
在这种情况下:
' var formattedText2 = formattedText1.replace(/^[,'[']()]*/g,"");'
被解码为 :
var formattedText2 = formattedText1.replace(/^[,[]()]*/g,"");
而不是作为:
var formattedText2 = formattedText1.replace(/^[,'[']()]*/g,"");
因此,通过为转义字符再添加一个转义字符,可以正确解析模式:
' var formattedText2 = formattedText1.replace(/^[,''['']()]*/g,"");'
很抱歉浪费时间分析原因(如果有的话)。
相关文章:
- 使用java脚本更改onClick事件中菜单选项卡的颜色
- 何时可以;我的用户脚本在Javascript中触发右键单击(上下文菜单)
- 使用Java脚本将值传递到模式弹出菜单
- 从下拉菜单将值传递给 gsp 中的脚本
- 移动菜单需要 Jquery 2.0.1,但其他站点脚本需要旧版本
- 子菜单的Jquery脚本,我该如何修复它
- 如何修复子菜单的此 jquery 脚本
- 修改此滚动导航菜单脚本
- 正则表达式映射在 Firefox 上下文菜单内容脚本中
- 下拉菜单 java 脚本
- 带有java脚本的下拉菜单,根据第一个下拉菜单更改值
- 在 Illustrator cs5.1 的“脚本”菜单下放置脚本的位置
- css菜单或脚本don'I don’我不干ie
- AJAX-如何在弹出菜单中运行脚本
- Mailto或超链接不会;由于子菜单脚本,无法处理页脚菜单
- 如何在Kendo UI中将java脚本函数设置为菜单栏项
- 谷歌脚本获取谷歌电子表格菜单内容
- 在内容脚本得到响应之前,禁止启动上下文菜单
- 我试图添加下面的脚本来列出一些产品,而添加这个脚本菜单栏是不起作用的.为什么?
- Jquery滚动脚本-菜单坐在顶部的部分,而不是里面