Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/464.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 匹配字符序列和其他不包含字符序列的字符序列_Javascript_Regex - Fatal编程技术网

Javascript 匹配字符序列和其他不包含字符序列的字符序列

Javascript 匹配字符序列和其他不包含字符序列的字符序列,javascript,regex,Javascript,Regex,这听起来像是一个已经多次出现的问题,但我无法找到JavaScript的答案 以流动的正则表达式为例: /("|,|\n|[^",\n]+)/ 它匹配字符串中的某些字符以及不包含其中一个字符的任何其他序列。 asd”asd,asd\n将匹配:asd,,asd,,,asd,\n 我正在寻找一些匹配类似的方式,但使用字符串 举一个更有用的例子: 匹配'或'和'&'以及所有不是'或'和'&'的内容: 构造函数是好的还是坏的?男人和上帝都是好人。 将匹配: 构造,或,好,或,坏?男人,和,女人,或,d都

这听起来像是一个已经多次出现的问题,但我无法找到JavaScript的答案

以流动的正则表达式为例:

/("|,|\n|[^",\n]+)/
它匹配字符串中的某些字符以及不包含其中一个字符的任何其他序列。
asd”asd,asd\n
将匹配:
asd
asd
asd
\n

我正在寻找一些匹配类似的方式,但使用字符串

举一个更有用的例子:

匹配'或'和'&'以及所有不是'或'和'&'的内容:

构造函数是好的还是坏的?男人和上帝都是好人。

将匹配:

构造
坏?男人
女人
d都很好。

或在[]之间匹配:

`[The construct][or][ is good ][or][ bad? The man ][&][ the l][or][d are good.]`
将其视为一个字符串,其中包含一组字符串,这些字符串由一个字符序列分隔,如(“ab”)。然后每个字符串表示一组由另一个序列(“cd”)分隔的其他字符串。
我想在大字符串中匹配所有作为分隔符的字符序列(“ab”、“cd”)和所有其他非分隔符的字符序列。

首先,我假设您打算在
中的
处断开字符串。如果没有,让我知道,我会调整,因为一般技术保持不变

这是一个有趣的问题,因为据我所知,js没有像PHP那样拆分字符串并保留分隔符的选项

然而,有一个简单的方法来实现这一点

第一步:
&
的每个实例周围放置一个不寻常的文本块,稍后您将使用该文本块分割字符串。这个的正则表达式是。。。drumroll<代码>(或|&)

js代码类似于
splitReady=str.replace(/(或|&)/mg,“[SPLIT]$1[SPLIT]”

输出:
构造[SPLIT]或[SPLIT]是好的[SPLIT]还是[SPLIT]坏的?男子[SPLIT]和[SPLIT]l[SPLIT]或[SPLIT]d都很好。

第二步:在每个
[split]

result=splitReady.split(/\[split\]/m)

这给了我们(空间可能无法正确显示在站点标记中):


构造
坏?人
d都很好。

你能用语言描述一下你预期输出的逻辑吗?这里要遵循的规则是什么?我想匹配不是其他东西(另一个字符串)的东西(一个字符串)还有其他的东西。你想匹配不包含字符串的字符串…?好的,问题是这里的其他字符串和原始字符串是什么…它们有什么区别…其他字符串是特定的还是有任何其他逻辑差异,第一种类型的字符串和其他类型的字符串是一样的字符串和其他字符串。这通常可以完成任务。我希望一步到位。我不知道这是否可能。这就是我问的原因。如果可能的话,我非常愿意使用它,因为我已经编写了一个函数,在匹配时调用它。如果没有任何东西出现,我会考虑这个例子,即使我看到2个错误的东西:1 -如果分裂已经在字符串中,整个事情变得疯狂,2 -在大字符串(我的情况)的性能受到影响。@拉斯文相信我,如果你选择一些独特的,如<代码>。S@P@L@I@T]
没有危险。:)对于javascript中的任务,这是一个很好的解决方案,因为js不支持lookbehinds,我通常会将它与lookbehinds结合起来,来拆分
&
。您可以在
之前使用前瞻
(?=或)|(?=&)
进行拆分,但您不能在第二次拆分的
之后定位自己。js不支持lookbehind抱歉,甚至是XXP库。所以在JavaScript中使用RegExp无法做到这一点?@razvan 99%确定。谷歌
javascript拆分保留分隔符
,你就会明白我的意思了。您可以一次在
&
之前拆分,但不能在之后拆分。如果有人让我相信我的话并发明了一些东西,我也会很高兴去学习的如果两周后有人提出更好的答案,你可以不接受我的答案,而接受他们的答案。没关系。不过,我会看看如何对它进行一些优化。