JavaScript正则表达式中匹配不可见字符

3
我有一些字符串包含不可见字符,但它们出现的位置是可以预测的。通常这些字符会围绕着我要提取的文本,并在第二个出现后,我想保留其余的文本。
我似乎无法找到同时按照不可见字符进行匹配,以及排除它们的结果。我已经使用了以下正则表达式来匹配不可见字符:/\xA0\x00-\x09\x0B\x0C\x0E-\x1F\x7F/,这个正则表达式确实起作用。
以下是一个示例:[invisibles] Keep as match 1 [invisibles] Keep as match 2 到目前为止,我一直在尝试使用以下方法但没有成功: /([\xA0\x00-\x09\x0B\x0C\x0E-\x1F\x7F]+)(.+)([\xA0\x00-\x09\x0B\x0C\x0E-\x1F\x7F]+)/(.+)
我在这里使用了捕获组,但自从我上次以这种方式使用正则表达式以来已经过了一段时间,所以我知道我错过了一些重要的东西。我希望能够只使不可见的字符匹配成为非捕获组,但似乎 JavaScript 不支持此操作。

1
非捕获组应该是 (?:something) 而不是 (something)。你能展示一下使用这个正则表达式的 JS 代码吗?为什么你的正则表达式的结束 / 不在最后呢?(参见 MDN 的正则表达式页面)。 - nnnnnn
1
“隐形字符”是指像《神奇四侠》中的Sue一样的角色吗?不是吗?那你能更清晰地定义一下吗? - Danack
在您的情况下,没有理由使用非捕获组——正则表达式字符默认是非捕获的。只需捕获您想要的即可。 - 7stud
1
@7stud 不是 - 不可见字符不是一个标准术语。问者是否指空格?如果是,他可以使用'\s'。 - Danack
抱歉,我直到今晚才能尝试您的答案,它完美地运行了。谢谢!您关于不使用捕获组是正确的,我不确定为什么我没有尝试过。 - FiniteLooper
显示剩余3条评论
1个回答

1

看起来你需要的是像这样的东西。第二个正则表达式基本上可以工作,但是/放错了位置。也许你没有正确地读取组数据。

var s = "\x0EKeep as match 1\x0EKeep as match 2";
var r = /[\xA0\x00-\x09\x0B\x0C\x0E-\x1F\x7F]+(.+)[\xA0\x00-\x09\x0B\x0C\x0E-\x1F\x7F]+(.+)/;

var match = s.match(r);

var part1 = match[1];
var part2 = match[2];

只是为了明确。所有字符之间都有看不见的字符。所以在字符串“abc”中有3个看不见的字符。就像这样I=特殊字符。“IaIbIc”。 - Muhammad Umer
@MuhammadUmer 我不确定我完全理解,您是在问每个字符串是否自动在所有可见字符之间添加了不可见字符吗?如果是这样,答案是否定的。如果您有具体问题,请创建一个新的问题。 - loganfsmyth
@MuhammadUmer 你可以编写一个正则表达式来匹配字符之间的空格,但这并不意味着每个字符之间都有一个看不见的字符。 - loganfsmyth
哇,那真是令人困惑,但还是谢谢...所以如果在ab之间找到匹配项,我到底要匹配什么? - Muhammad Umer
@MuhammadUmer 请开一个新的问题。 - loganfsmyth

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接