Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.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,我试图找到一种匹配单个字符的方法,除非它在一个特定的单词中 问题是我试图找到所有的“/”,但不是“TCP/IP”中的那些。我发现一个消极的前瞻可以完成这项工作,但问题是要排除整个“TCP/IP”字。 当我跳出“/”时,它会使负前瞻错误 测试的正则表达式是: (?!TCP\/IP)\/ 要测试的数据: PHP/JAVA/TCP/IP/PYTHON/JAVASCRIPT 它应该匹配每个“/”,但“TCP/IP”中的除外 然而,当我使用regex101.com测试regex时,我的负前瞻部分在添加

我试图找到一种匹配单个字符的方法,除非它在一个特定的单词中

问题是我试图找到所有的“/”,但不是“TCP/IP”中的那些。我发现一个消极的前瞻可以完成这项工作,但问题是要排除整个“TCP/IP”字。 当我跳出“/”时,它会使负前瞻错误

测试的正则表达式是:

(?!TCP\/IP)\/
要测试的数据:

PHP/JAVA/TCP/IP/PYTHON/JAVASCRIPT
它应该匹配每个“/”,但“TCP/IP”中的除外

然而,当我使用regex101.com测试regex时,我的负前瞻部分在添加/:

Negative Lookahead (?!TCP\/IP)
Assert that the Regex below does not match
TCP matches the characters TCP literally (case insensitive)
\/ matches the character / literally (case insensitive)
IP matches the characters IP literally (case insensitive)
似乎它不再是一个单词了

我认为它可以很容易地修复,但我目前没有解决办法


谢谢。

我能够使用Regexr构建一个符合我相信您要求的正则表达式-每个
/
都是
TCP/IP
中不存在的

我必须将您的环顾分解为TCP的负环顾(
(?)然后是
/
\/
)然后是IP的负环顾(
(?!IP)

生成的正则表达式是
(?)


请参阅:

我无法找到一种使用纯正则表达式的方法,但正则表达式的另一种替代方法是只在
/
上拆分,然后迭代生成的数组一次,以处理
TCP/IP
项的边缘情况:

var input=“PHP/JAVA/TCP/IP/PYTHON/JAVASCRIPT”
var parts=input.split(“/”)
var保持=[];
var标志=假;
对于(变量i=0;i
并非所有浏览器都支持“反向查找”功能。
警告

const string='PHP/JAVA/TCP/IP/PYTHON/JAVASCRIPT/ABC/ABDEFIP';
常量regex=/\/(?![^TCP]*IP)/g;
const output=string.replace(正则表达式“”);

console.log(输出);
由于不完全支持负面外观落后,您可能需要匹配您不想要的内容,并在捕获组中捕获您想要的内容

您的值位于第一个捕获组
$1

\bTCP\/IP\b|(\/)
这将符合:

  • \bTCP\/IP\b
    在单词边界之间匹配TCP/IP
  • |
  • (!\/)
    在组1中捕获正斜杠

请参见a

除了匹配要拆分的斜杠,还可以使用“reverse”正则表达式查找所有匹配项

const string=“PHP/JAVA/TCP/IP/PYTHON/JAVASCRIPT”;
const regex=/(TCP\/IP)(?=\/$)\[^/]+/g;
//             ^       ^
//这个组在这里是不必要的,但在我的第二个示例中是必需的。

console.log(string.match(regex))
您能告诉我们您期望的输出是什么吗?当然可以:PHP**/**JAVA**/**TCP/IP**/**PYTHON**/**JAVASCRIPT我在格式化它时遇到了问题。但基本上,****@Barzou之间的/是,您的格式化不起作用的原因是,只有在文本前后有一个非单词字符时,它才起作用。这:**text**变成:text。因为星号前后都没有字母。您想要的东西只能使用标记来实现,但不允许在注释中使用HTML标记。这确实符合我的要求,谢谢。但是如果我想从更多单词中排除“/”,该怎么办?(这是最终目标)使用一个lookahead,使用OR运算符(|)很容易,但在这种情况下,我不知道如何操作。:(您可以在lookahead中使用
|
。例如,将
/TACO/sause/OTHER/STUFF
添加到搜索字符串中,然后尝试以下正则表达式:
(?在处理包含相同分隔符的大量数据时,这可能非常麻烦。除非您可以将源数据更改为使用不同的分隔符,否则这是我能想到的最佳选择。但我无法想象,如果将/更改为另一个字符那么简单,您会提出这样的请求:)是的,如果我能够控制数据源,这将非常简单。感谢这个解决方案,我将实现它,因为它似乎解决了我的问题。:)祝您愉快。请记住,look behinds是(您用JavaScript标记了这个问题)。此外,您还应该注意
(?也与
TCP/SAUCE
TACO/IP
中的斜杠不匹配,因此不仅
TCP/IP
TACO/SAUCE
[^TCP]*
的作用与您认为的不同。请尝试在字符串末尾添加
/ABC/ABDEFIP
。仅供参考-当前正则表达式显示。如果后面没有任何数量的非
[TCP],请匹配
/
字符。后跟
IP
。我的示例有一个
/
。后跟字符
ABDEF
,它们都是非
[TCP]
字符。后跟
IP
。明白了,谢谢你提供的信息。其他需要这种情况的人,请查看下面的@3limin4t0r。如果你想进行不区分大小写的匹配,请在上面的示例中添加
i
标志。多亏了你的解决方案,我实现了一些东西。谢谢。:)立即测试。;)