我有下面的示例代码,其中有一个Excel公式数组,我正在使用regex试图将URL和超级链接的标题与字符串隔离开来。这似乎对一些人有效,但在另一些情况下返回null。
我认为这可能是循环,但我也得到了坏的结果,如下面的例子2所示。
示例1:
var linkList = ['=HYPERLINK("https://example.com","Example")', '=HYPERLINK("https://example2.com","Example 2")', '=HYPERLINK("https://example3.com","Example 3")', '=HYPERLINK("https://example4.com","Example 4")'];
const url_re = /".*?"/g;
const linkName_re = /\,(".*?")/g;
linkList.forEach(function(currentValue, index, array){
+console.log(url_re.exec(currentValue));
console.log(linkName_re.exec(currentValue));
console.log("---------------------------");
});输出:
[ '"https://example.com"',
index: 11,
input: '=HYPERLINK("https://example.com","Example")' ]
[ ',"Example"',
'"Example"',
index: 32,
input: '=HYPERLINK("https://example.com","Example")' ]
---------------------------
[ '","',
index: 32,
input: '=HYPERLINK("https://example2.com","Example 2")' ]
null
---------------------------
null
[ ',"Example 3"',
'"Example 3"',
index: 33,
input: '=HYPERLINK("https://example3.com","Example 3")' ]
---------------------------
[ '"https://example4.com"',
index: 11,
input: '=HYPERLINK("https://example4.com","Example 4")' ]
null
---------------------------示例2:
const url_re = /".*?"/g;
const linkName_re = /\,(".*?")/g;
console.log(url_re.exec('=HYPERLINK("https://example.com","Example")'));
console.log(linkName_re.exec('=HYPERLINK("https://example.com","Example")'));
console.log("---------------------------");
console.log(url_re.exec('=HYPERLINK("https://example2.com","Example 2")'));
console.log(linkName_re.exec('=HYPERLINK("https://example.com","Example 2")'));
console.log("---------------------------");
console.log(url_re.exec('=HYPERLINK("https://example3.com","Example 3")'));
console.log(linkName_re.exec('=HYPERLINK("https://example.com","Example 3")'));
console.log("---------------------------");
console.log(url_re.exec('=HYPERLINK("https://example4.com","Example 4")'));
console.log(linkName_re.exec('=HYPERLINK("https://example.com","Example 4")'));
console.log("---------------------------");输出:
[ '"https://example.com"',
index: 11,
input: '=HYPERLINK("https://example.com","Example")' ]
[ ',"Example"',
'"Example"',
index: 32,
input: '=HYPERLINK("https://example.com","Example")' ]
---------------------------
[ '","',
index: 32,
input: '=HYPERLINK("https://example2.com","Example 2")' ]
null
---------------------------
null
[ ',"Example 3"',
'"Example 3"',
index: 32,
input: '=HYPERLINK("https://example.com","Example 3")' ]
---------------------------
[ '"https://example4.com"',
index: 11,
input: '=HYPERLINK("https://example4.com","Example 4")' ]
null
---------------------------发布于 2017-10-21 20:10:13
为什么不尝试使用regex中的组来匹配URL和名称。像这样的东西
\("(.*?)".*?\"(.*?)"完整的例子可以是这样的
var linkList = ['=HYPERLINK("https://example.com","Example")', '=HYPERLINK("https://example2.com","Example 2")', '=HYPERLINK("https://example3.com","Example 3")', '=HYPERLINK("https://example4.com","Example 4")'];
var myRegexp = /\("(.*?)".*?\"(.*?)"/g;
var match = myRegexp.exec(linkList);
while (match != null) {
console.log(match[1])
console.log(match[2])
console.log("---------------------------");
match = myRegexp.exec(linkList);
}
发布于 2017-10-21 20:12:38
移除g标志。
如果正则表达式使用"g“标志,则可以多次使用exec()方法在同一字符串中查找连续匹配。MDN
const url_re = /".*?"/;
const linkName_re = /\,(".*?")/;
console.log(url_re.exec('=HYPERLINK("https://example.com","Example")'));
console.log(linkName_re.exec('=HYPERLINK("https://example.com","Example")'));
console.log("---------------------------");
console.log(url_re.exec('=HYPERLINK("https://example2.com","Example 2")'));
console.log(linkName_re.exec('=HYPERLINK("https://example.com","Example 2")'));
console.log("---------------------------");
console.log(url_re.exec('=HYPERLINK("https://example3.com","Example 3")'));
console.log(linkName_re.exec('=HYPERLINK("https://example.com","Example 3")'));
console.log("---------------------------");
console.log(url_re.exec('=HYPERLINK("https://example4.com","Example 4")'));
console.log(linkName_re.exec('=HYPERLINK("https://example.com","Example 4")'));
console.log("---------------------------");
https://stackoverflow.com/questions/46867027
复制相似问题