正则表达式追加字符并删除双引号

时间:2019-06-04 21:54:41

标签: javascript regex

我在正则表达式下面尝试从其中捕获一些字符串:

    "CallbackFnCreate_[\W]{4}(.*?[^\w-])

Required Output should be : /TestResult_20190604-120620 (Capture 
TestResult_20190604-120620 and append "/" in the beginning)

我的第1组输出是:TestResult_20190604-120620“

1|#||4|3952|updatePanel|WorkflowFileExplorer_ajaxPanel|<div `id="WorkflowFileExplorer_pbContainer" style="width:0px;height:0px;overflow:hidden;position:relative;"><input type="button" name="WorkflowFileExplorer$pb" value="pb" onclick="javascript:__doPostBack(&#39;WorkflowFileExplorer$pb&#39;,&#39;&#39;)" id="WorkflowFileExplorer_pb" tabindex="-1" /><input name="WorkflowFileExplorer$postbackArgument" type="hidden" id="WorkflowFileExplorer_postbackArgument" value="CallbackFnCreate_/***TestResult_20190604-120620" /></div><div id="WorkflowFileExplorer_tree" class="RadTreeView RadTreeView_Default">`

4 个答案:

答案 0 :(得分:1)

我的猜测是,我们希望仅进行替换并稍微修改原始表达式:

.+("CallbackFnCreate_\/\*\*\*(.+?)").+

我们期望的输出在此捕获组中

(.+?)

测试

const regex = /.+("CallbackFnCreate_\/\*\*\*(.+?)").+/gm;
const str = `1|#||4|3952|updatePanel|WorkflowFileExplorer_ajaxPanel|<div \`id="WorkflowFileExplorer_pbContainer" style="width:0px;height:0px;overflow:hidden;position:relative;"><input type="button" name="WorkflowFileExplorer\$pb" value="pb" onclick="javascript:__doPostBack(&#39;WorkflowFileExplorer\$pb&#39;,&#39;&#39;)" id="WorkflowFileExplorer_pb" tabindex="-1" /><input name="WorkflowFileExplorer\$postbackArgument" type="hidden" id="WorkflowFileExplorer_postbackArgument" value="CallbackFnCreate_/***TestResult_20190604-120620" /></div><div id="WorkflowFileExplorer_tree" class="RadTreeView RadTreeView_Default">\`
`;
const subst = `\/$2`;

// The substituted value will be contained in the result variable
const result = str.replace(regex, subst);

console.log('Substitution result: ', result);

答案 1 :(得分:1)

只需使用括号即可捕获相关部分,并在替换时附加“ /”。

var re = /.+"CallbackFnCreate_\/\W{3}([^"]+).+/;
var text = '1|#||4|3952|updatePanel|WorkflowFileExplorer_ajaxPanel|<div `id="WorkflowFileExplorer_pbContainer" style="width:0px;height:0px;overflow:hidden;position:relative;"><input type="button" name="WorkflowFileExplorer$pb" value="pb" onclick="javascript:__doPostBack(&#39;WorkflowFileExplorer$pb&#39;,&#39;&#39;)" id="WorkflowFileExplorer_pb" tabindex="-1" /><input name="WorkflowFileExplorer$postbackArgument" type="hidden" id="WorkflowFileExplorer_postbackArgument" value="CallbackFnCreate_/***TestResult_20190604-120620" /></div><div id="WorkflowFileExplorer_tree" class="RadTreeView RadTreeView_Default">`';

var res = text.replace(re, '/$1')

console.log(res)

答案 2 :(得分:1)

您可以使用捕获组,并在替换位置中在第一个捕获组之前使用正斜杠。

"CallbackFnCreate_\/\*{3}([^"]+)(?=")

说明

  • "CallbackFnCreate_字面上匹配
  • \/\*{3}匹配/和3次*
  • (捕获组1
    • [^"]+匹配1次以上而不是"
  • )关闭捕获组
  • (?=")断言右边是"

Regex demo

const regex = /"CallbackFnCreate_\/\*{3}([^"\n]+)(?=")/;
const str = `1|#||4|3952|updatePanel|WorkflowFileExplorer_ajaxPanel|<div \`id="WorkflowFileExplorer_pbContainer" style="width:0px;height:0px;overflow:hidden;position:relative;"><input type="button" name="WorkflowFileExplorer\$pb" value="pb" onclick="javascript:__doPostBack(&#39;WorkflowFileExplorer\$pb&#39;,&#39;&#39;)" id="WorkflowFileExplorer_pb" tabindex="-1" /><input name="WorkflowFileExplorer\$postbackArgument" type="hidden" id="WorkflowFileExplorer_postbackArgument" value="CallbackFnCreate_/***TestResult_20190604-120620" /></div><div id="WorkflowFileExplorer_tree" class="RadTreeView RadTreeView_Default">\``;
let res = str.match(regex);
console.log("/" + res[1]);

答案 3 :(得分:0)

const unformattedName = 'CallbackFnCreate_/***TestResult_20190604-120620"';
const found = unformattedName.match(/CallbackFnCreate_(\/)[\W]{3}(.*?[^\w-])/);

document.write(found[1]+found[2]);
第一个捕获组是(/),它将匹配“ /”,然后第二个捕获组是(。*?[^ \ w-])将匹配“ TestResult_20190604-120620”。

下面有更多说明。...

1)(/)\是反斜杠,用于转义“ /”,因为/是正则表达式中的特殊字符,它告诉javascript这只是一个字符串,而不是特殊字符。因此,“ /”是匹配的。

2)[\ W] {3} ---这不是一个分组,因为它不在方括号中。 [\ W]表示捕获任何非单词[\ W] {3}表示捕获三个连续的非单词,在您的情况下为***。

3)(。?[^ \ w-])-----。表示捕获除换行符之外的任意数量的字符。从字面上看,它旨在捕获除“?”以外的所有字符。使它变得懒惰。?因此,这意味着它应该捕获所有字符,但应尝试将其最小化。 [^ \ w-]表示它应捕获不是单词的任何字符,即[a-zA-Z0-9_],也不应捕获“-”。因此。?[[^ \ w-]-表示捕获所有字符,但在第一个非单词字符之后停止--这是第2组。

4)组1-将输出= / 组2 –将输出='TestResult_20190604-120620“';