在破折号“-”正则表达式||之后选择所有内容的JavaScript

时间:2018-11-06 18:00:28

标签: javascript regex

因此,我正在JavaScript中与Regex一起使用,以从纯文本文件中获取匹配的数据,该文本文件带有以“-”开头的各种列表项。

起初,我使用了以下RegEx:

/(?<=- |\d\. ).*/g

但是事实证明,在浏览器中不再允许使用正向回溯,因此它们目前只能在Chrome浏览器上使用,而不能在其他浏览器上使用。

然后我尝试通过以下方法解决此问题,而无需进行回溯:

(\-\ |\d\.\ ).+

但这还会选择实际的破折号和第一个空格,这也是我不想要的,因为我需要第一个破折号和空格后面的所有内容。

我的信息格式如下:

- List item 1
- List item 2
- List item 3
- List item 4

并且我需要文本文件中每一行的输出为“列表项#”。 有人可以指导我正确的方向来解决这个问题,还是可以替代JavaScript .match()函数?

谢谢。

4 个答案:

答案 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, ""); } });

结果如下:https://regex101.com/r/OwZl8g/1

答案 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。

希望这些可以帮助您。