因此,我正在JavaScript中与Regex一起使用,以从纯文本文件中获取匹配的数据,该文本文件带有以“-”开头的各种列表项。
起初,我使用了以下RegEx:
/(?<=- |\d\. ).*/g
但是事实证明,在浏览器中不再允许使用正向回溯,因此它们目前只能在Chrome浏览器上使用,而不能在其他浏览器上使用。
然后我尝试通过以下方法解决此问题,而无需进行回溯:
(\-\ |\d\.\ ).+
但这还会选择实际的破折号和第一个空格,这也是我不想要的,因为我需要第一个破折号和空格后面的所有内容。
我的信息格式如下:
- List item 1
- List item 2
- List item 3
- List item 4
并且我需要文本文件中每一行的输出为“列表项#”。 有人可以指导我正确的方向来解决这个问题,还是可以替代JavaScript .match()函数?
谢谢。
答案 0 :(得分:2)
您可以捕获-
或数字后的子字符串,如下所示:
(?:- |\d\. )(.*)
第1组将包含您想要的文本。
var string = `- List item 1
- List item 2
- List item 3
- List item 4`
var regex = /(?:- |\d\. )(.*)/g
var match = null
while (match = regex.exec(string)) {
console.log(match[1]); // match[1] is the string in group 1
}
或者,
console.log(string.replace(regex, "$1"))
它将用组1替换整个匹配项。如果您希望将输出作为单个字符串而不是列表数组,则此方法适用。
答案 1 :(得分:1)
将其放入非捕获组: login.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
String text = name.getText();
char[] password = pass.getPassword();
System.out.println(" "+ text + ""+new String(password));
createWindow(1280, 720, "");
}
});
。
答案 2 :(得分:1)
如果它们是第一行要匹配的内容,则可以从字符串的开头0+乘以一个空格(或字符类中的空格和制表符)进行匹配,使用和交替来匹配破折号或数字和一个点。然后使用捕获组捕获以下内容:
^ *(?:-|\d+\.) (.*)$
const strings = [
'- List item 1',
' 1. List item 2',
'1. List item 3'
];
let pattern = /^ *(?:-|\d+\.) (.*)$/;
strings.forEach(s => {
console.log(s.match(pattern)[1]);
});
答案 3 :(得分:1)
也许您可以给我们输入文字的例子。
const regexp = /(?:- )(\w)/g;
const input = '- a, some words - b';
const result = input.match(regexp); // result: ['- a','- b']
我强烈建议您使用https://regexper.com可视化RegEx。
希望这些可以帮助您。